[[Open棟梁Project>http://opentouryo.osscons.jp/]] - [[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]] -[[戻る>クレームベース認証]] * 目次 [#ld8342fd] #contents *概要 [#yfb13271] -JWTとはJSON Web Tokenの略 -JSONを使ったurl-safeなクレームの表現方法 -クレームが改ざんされていないかをチェック可能 --この特徴のため、認証サーバから返されるトークンに使われる。 --主に、[[OAuth]]拡張や[[OpenID Connect]]などで使われている。 -JWSとJWE構造の両方の中にエンコードされるJSONクレームのセット~ (JWTを作る方法としてJWSとJWE、もしくは両方を使った方法がある) *構造 [#ad27d98c] **構成要素 [#q01f4062] 以下の要素から構成される。 ***ヘッダ [#m9c6f99a] ***クレーム [#m5b94cda] -予約済みクレーム -パブリッククレーム -プライベートクレーム ***署名 [#f7edb04c] **JWTの種類 [#j5dabc60] ***JWS [#md583102] 署名されたJWT BASE64URL (UTF-8 (Header)) . BASE64URL (UTF-8 (Claim Set)) . Base64url (UTF-8 ( Signature)) ***JWE [#y75c2692] 暗号化されたJWT BASE64URL (UTF-8 (JWE Protected Header)) . BASE64URL(JWE Encrypted Key) . BASE64URL(JWEInitialization Vector) . BASE64URL(JWE Ciphertext) . BASE64URL(JWE Authentication Tag) ***プレーンJWT [#of14a838] [[ヘッダ>#m9c6f99a]]内のalgはnone = {“alg”: “none”} 。 BASE64URL (UTF-8 (Header)) . BASE64URL (UTF-8 (Claim Set)) *JWTの作成と検証手順 [#dd514c38] 難しいのでライブラリを使用する。.NETならNugetからメジャーな奴を入れる。 -JWS 実装時に作りがちな脆弱性パターン - OAuth.jp~ http://oauth.jp/blog/2015/03/16/common-jws-implementation-vulnerability/ -OpenID Connect の JWT の署名を自力で検証してみると見えてきた公開鍵暗号の実装の話 - Qiita~ http://qiita.com/bobunderson/items/d48f89e2b3e6ad9f9c4c -oauth - Is there a JSON Web Token (JWT) example in C#? - Stack Overflow~ http://stackoverflow.com/questions/10055158/is-there-a-json-web-token-jwt-example-in-c **JWTの作成手順 [#pfa9f0dd] ***概要 [#wbf0fb96] -JWSまたはJWEの手順に従って生成 -入れ子になったJWTの場合には[[ヘッダ>#m9c6f99a]]の”cty”の値に”JWT”を指定 ***手順(JWS) [#p744be69] -[[ヘッダ>#m9c6f99a]]を生成し、UTF-8のバイト文字列に変換し、BASE64urlエンコード。 -クレームセットを生成し、UTF-8のバイト文字列に変換し、BASE64urlエンコード。 -BASE64urlエンコード済みの[[ヘッダ>#m9c6f99a]]とクレームセットを~ ピリオドで連結する、UTF-8バイト文字列に変換し、BASE64urlエンコード。 -上記をヘッダで指定した暗号化プロバイダで暗号化(ハッシュ or 暗号化) **JWTの検証手順 [#r8923712] -JWTを[[ヘッダ>#m9c6f99a]]、クレームセット、署名に分割しBASE64urlでデコード -[[ヘッダ>#m9c6f99a]]から種類(JWT、JWS、JWE)、暗号化プロバイダを確認 -種類、暗号化プロバイダを考慮してJWTの検証を行なう。 -JWTの検証が完了した後、クレーム内の有効期限の検証も行なう。 -JSON Web Tokens - jwt.io~ https://jwt.io/ *認証用途でJWT利用 [#yd304024] -JWT(JSON Web Token)を使った認証を試みる | 69log~ https://blog.kazu69.net/2016/07/30/authenticate_with_json_web_token/ -JWT(Json Web Token)を利用したWebAPIでのCredentialの受け渡しについて | I am mitsuruog~ http://blog.mitsuruog.info/2014/08/jwtjson-web-tokenwebapicredential.html -JWTを使った簡易SSOで徐々にシステムをリニューアルしている話~ http://www.slideshare.net/TsuchiKazu/jwt-ssopepabotech *参考 [#p90217f2] -JSON Web Token の効用 - Qiita~ http://qiita.com/kaiinui/items/21ec7cc8a1130a1a103a -JWTについて簡単にまとめてみた - hiyosi's blog~ https://hiyosi.tumblr.com/post/70073770678/jwt%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E7%B0%A1%E5%8D%98%E3%81%AB%E3%81%BE%E3%81%A8%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F -IETF JOSE WG と OAuth WG から一気に9本の RFC が! - OAuth.jp~ http://oauth.jp/blog/2015/05/20/jose-and-oauth-assertion-rfcs/ ---- Tags: [[:認証基盤]], [[:クレームベース認証]]