「マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
JWT : JSON Web Tokenは、jot(ジョット)と発音する、
JOSE : JSON Object Signing and Encryptionのサブセット仕様。
以下の要素から構成される。
ここの詳細は、RFCを参照。
個別に、
などを参照のこと。
# | キー | 説明 |
1 | "iss" | Issuer クレーム |
2 | "sub" | Subject クレーム |
3 | "aud" | Audience クレーム |
4 | "exp" | Expiration Time クレーム |
5 | "nbf" | Not Before クレーム |
6 | "iat" | Issued At クレーム |
7 | "jti" | JWT ID クレーム |
8 | "typ" | Type クレーム |
{ "sub": "1234567890", "name": "John Doe", "admin": true }
JWTの種類によって様々。
BASE64URL (UTF-8 (Header)) . BASE64URL (UTF-8 (Claim Set)) .
JWSやJWEで利用される各アルゴリズムおよびそれらの識別子を定義している仕様
コチラを参照。
コチラを参照。
以下でメール着信確認トークンを使用するようなケースで利用する事で、
トークンをtempストアに格納して、後に比較するような実装が不要になる。
項番 | 言語 | ライブラリのURL |
0 | JavaScript | https://www.w3.org/TR/WebCryptoAPI/ |
1 | Ruby | https://github.com/nov/json-jwt |
2 | Python | https://github.com/rohe/pyjwkest |
3 | Java | https://bitbucket.org/nimbusds/nimbus-jose-jwt/wiki/Home |
4 | PHP | https://github.com/ritou/php-Akita_JOSE |
5 | Perl | https://github.com/xaicron/p5-JSON-WebToken |
6 | Objective-C | https://github.com/yourkarma/JWT |
7 | .NETなら | NuGetからメジャーな奴を入れる。 |
Microsoft Open Technologiesによって開発された、
JSON Web Token Handler For the Microsoft .Netというライブラリ。
下記が参考になる。
上記は、Resource Ownerであるユーザが介在することなく
ClientがResource ServerのAPIを利用するようなユースケースらしく、
以下の様な、grant_typeで、Access Tokenを取得して、WebAPIにアクセスする。
この時、Googleの秘密鍵のキー長は1024bitだが、
このライブラリは最低でも2048bitを要求しているため、
相互運用が不可だったらしい。
恐らく、色々なライブラリ間の実装差異で
相互運用が難しくなるようなケースがあると思う。
以下の2メソッドのインターフェイスを確認すると、
引数・戻り値に、Microsoft.Owin.Security.AuthenticationTicket?が在ったり、
.NET技術と結合度が高く、相互運用には向かないように見える。
Version Historyを参照。
以前は、JSON Web Token Handler For the Microsoft .Netという表示名だったようだが、
version 05-00からは、パッケージ名(=名前空間)と同じ表示名になっている。
ライセンスはMITだが、ソースコードをGithubやCodePlex?上に確認できない・・・。
上記の、BCL入りしているJwtSecurityTokenHandler?が含まれる名前空間より
一つ下の階層のJWT系の追加ライブラリを格納する名前空間であるもよう。
必要に応じて、追加でNuGetから取得する必要がある。
詳しくは、Version Historyを参照。
以下を考慮して開発可能。
他のライブラリでも検証・復号化が可能かどうかは、
JSON Web Tokens - jwt.ioなどの検証サイトを使用して確認すると良い。
このライブラリも必要になる。
RFC4648に条件付きでパディング外すなどの難しい処理が
あるようなので、ライブラリを使用するほうが良いかもしれない
(Microsoft.Owin.Securityのicrosoft.Owin.Security.DataHandler?.Encoderにライブラリがある)。
実装に脆弱性を作らないように注意する。
ざっくり、
ということらしい。
後者は、
検証でtrueになるJWTを生成できてしまう模様。
特定用途の自作ライブラリであれば、
署名と検証のalgは固定にしておくのも良いと考える。
jose : Javascript Object Signing and Encryption
Tags: :認証基盤, :クレームベース認証, :暗号化