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

目次

概要

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

仕様

用途

構造

構成要素

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

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

個別に、

などを参照のこと。

ヘッダ

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

その他

JWTの種類によって様々。

JWTの種類

JWS

JWE

プレーンJWT

JWTの作成と検証手順

JWTの作成手順

JWS

JWE

JWTの検証手順

JWS

JWE

JWTのアルゴリズム

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

ユースケース

認証用途

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によって開発された、
JSON Web Token Handler For the Microsoft .Netというライブラリ。

下記が参考になる。

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

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

相互運用が不可だったらしい。

恐らく、色々なライブラリ間の実装差異で
相互運用が難しくなるようなケースがあると思う。

Microsoft.Owin.Security.Jwt.JwtFormat

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

検索結果

JSON Web Token (JWT) implementation for .NET

Version Historyを参照。

System.IdentityModel?.Tokens.Jwt

以前は、JSON Web Token Handler For the Microsoft .Netという表示名だったようだが、
version 05-00からは、パッケージ名(=名前空間)と同じ表示名になっている。
ライセンスはMITだが、ソースコードをGithubやCodePlex?上に確認できない・・・。

上記の、BCL入りしているJwtSecurityTokenHandler?が含まれる名前空間より
一つ下の階層のJWT系の追加ライブラリを格納する名前空間であるもよう。

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

詳しくは、Version Historyを参照。

自作のJWTライブラリ

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

用途

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

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

Base64url Enc/Dec

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

脆弱性

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

ざっくり、

ということらしい。

後者は、

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

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

参考

参考

RFC

OAuth WG

JOSE WG

jose : Javascript Object Signing and Encryption

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

内部

JWS

JWE

JWK

JWA


Tags: :認証基盤, :クレームベース認証, :暗号化


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