マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。

目次

概要

以下の内容で最終確認済み。
https://tools.ietf.org/html/rfc7519

JWT : JSON Web Tokenは、jot(ジョット)と発音する、
JOSE : JSON Object Signing and Encryptionのサブセット仕様。

仕様

用途

構造

構成要素

以下の要素から構成される。

ここの詳細は、RFCを参照。

個別に、

などを参照のこと。

ヘッダ

ペイロード(クレームセット)

その他

JWTの種類によって様々。

JWTの種類

JWS

JWE

ネストされたJWT

無担保JWT

JWTの作成と検証手順

JWTの作成手順

JWS

JWE

JWTの検証(復号)手順

JWSやJWEの手順に従って検証(復号)

JWS

JWE

JWTのアルゴリズム

利用される各アルゴリズムおよびそれらの識別子を定義している仕様

JWS

JWE

ユースケース

認証用途

OpenID ConnectのIDトークン

コチラを参照。

OAuth 2.0のアクセストークン

コチラを参照。

シングルサインオン(SSO)

メール着信確認トークン

以下でメール着信確認トークンを使用するようなケースで利用する事で、
トークンをtempストアに格納して、後に比較するような実装が不要になる。

共有用URL

ライブラリ

様々なライブラリ(相互運用)

項番言語ライブラリのURL
0JavaScripthttps://www.w3.org/TR/WebCryptoAPI/
1Rubyhttps://github.com/nov/json-jwt
2Pythonhttps://github.com/rohe/pyjwkest
3Javahttps://bitbucket.org/nimbusds/nimbus-jose-jwt/wiki/Home
4PHPhttps://github.com/ritou/php-Akita_JOSE
5Perlhttps://github.com/xaicron/p5-JSON-WebToken
6Objective-Chttps://github.com/yourkarma/JWT
7.NETならNuGetからメジャーな奴を入れる。

相性がある模様

System.IdentityModel.Tokens.JwtSecurityTokenHandler

Microsoft Open Technologiesによって開発された、BCL入りしている
JSON Web Token Handler For the Microsoft .NETというライブラリ。

下記が参考になる。

上記は、Resource Ownerであるユーザが介在することなく
ClientがResource ServerのAPIを利用するようなユースケースらしく、
以下の様な、grant_typeで、Access Tokenを取得して、WebAPIにアクセスする。

この時、Googleの秘密鍵のキー長は1024bitだが、
このライブラリは最低でも2048bitを要求しているため、

相互運用が不可だったらしい
(ちなみにVisual Studioが生成するpfxのキー長も1024bitだったりする)。

恐らく、色々なライブラリ間の実装差異で相互運用が難しくなるようなケースがあると思う。
また、マニュアルもほとんどなく、恐らくJWEJWKに対応していないものと思われる。

Microsoft.Owin.Security.Jwt.JwtFormat

以下の2メソッドのインターフェイスを確認すると、
引数・戻り値に、Microsoft.Owin.Security.AuthenticationTicket?が在ったり、
.NET技術と結合度が高く、相互運用には向かないように見える。

検索結果

jose-jwt

Jwt.Net

System.IdentityModel?.Tokens.Jwt

上記の、BCL入りしているJwtSecurityTokenHandlerが含まれる名前空間より
一つ下の階層のJWT系の追加ライブラリを格納する名前空間であるもよう。
※ 名前空間的には、下の階層の方が、上位スタックになるんだなぁ。

必要に応じて、追加でNuGetから取得する必要がある。

自作のJWTライブラリ

以下を考慮して開発可能。

用途

相互運用(検証・復号化)

他のライブラリでも検証・復号化が可能かどうかは、
JSON Web Tokens - jwt.ioなどの検証サイトを使用して確認すると良い。

Base64url Enc/Dec

このライブラリも必要になる。

脆弱性

実装に脆弱性を作らないように注意する。

ざっくり、

ということらしい。

後者は、

検証でtrueになるJWTを生成できてしまう模様。

特定用途の自作ライブラリであれば、
署名と検証のalgは固定にしておくのも良いと考える。

参考

参考

内部

JWS

JWE

JWK

JWA

RFC

OAuth WG

JOSE WG

jose : Javascript Object Signing and Encryption

OpenID ファウンデーション・ジャパン


Tags: :IT国際標準, :認証基盤, :クレームベース認証, :暗号化


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS