「マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
以下の内容で最終確認済み。
https://tools.ietf.org/html/rfc7515
JWSの基本的なヘッダ(≒JWS Compact Serializationの場合の保護ヘッダ)には、以下のものがある。
{ "alg": "HS256", "typ": "JWT" }
{ "alg": "RS256", "typ": "JWT" }
{ "alg": "ES256", "typ": "JWT" }
"jku" and / or "x5u"ヘッダパラメタをサポートする実装は、TLSが必要。
多くの場合は、この表現(エンコード)。
BASE64URL (UTF-8 (Header)) . BASE64URL (UTF-8 (Claim Set)) . BASE64URL (UTF-8 (Signature))
※ 殆どの場合、こちらが使用されている。
{ "payload":"<payload contents>", "signatures":[ {"protected":"<integrity-protected header 1 contents>", "header":<non-integrity-protected header 1 contents>, "signature":"<signature 1 contents>"}, ... {"protected":"<integrity-protected header N contents>", "header":<non-integrity-protected header N contents>, "signature":"<signature N contents>"}] }
{ "payload": "eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogImh0dHA6Ly9leGF tcGxlLmNvbS9pc19yb290Ijp0cnVlfQ", "signatures":[ {"protected":"eyJhbGciOiJSUzI1NiJ9", "header": {"kid":"2010-12-29"}, "signature": "cC4hiUPoj9Eetdgtv3hF80EGrhuB__dzERat0XF9g2VtQgr9PJbu3XOiZj5RZ mh7AAuHIm4Bh-0Qc_lF5YKt_O8W2Fp5jujGbds9uJdbF9CUAr7t1dnZcAcQjb KBYNX4BAynRFdiuB--f_nZLgrnbyTyWzO75vRK5h6xBArLIARNPvkSjtQBMHl b1L07Qe7K0GarZRmB_eSN9383LcOLn6_dO--xi12jzDwusC-eOkHWEsqtFZES c6BfI7noOPqvhJ1phCnvWh6IeYI2w9QOYEUipUTI8np6LbgGY9Fs98rqVt5AX LIhWkWywlVmtVrBp0igcN_IoypGlUPQGe77Rw"}, {"protected":"eyJhbGciOiJFUzI1NiJ9", "header": {"kid":"e9bc097a-ce51-4036-9562-d2ade882db0d"}, "signature": "DtEhU3ljbEg8L38VWAfUAqOyKAM6-Xx-F4GawxaepmXFCgfTjDxw5djxLa8IS lSApmWQxfKTUJqPP3-Kg6NU1Q"}] }
{ "payload": "eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogImh0dHA6Ly9leGF tcGxlLmNvbS9pc19yb290Ijp0cnVlfQ", "protected":"eyJhbGciOiJFUzI1NiJ9", "header": {"kid":"e9bc097a-ce51-4036-9562-d2ade882db0d"}, "signature": "DtEhU3ljbEg8L38VWAfUAqOyKAM6-Xx-F4GawxaepmXFCgfTjDxw5djxLa8IS lSApmWQxfKTUJqPP3-Kg6NU1Q" }
JOSEヘッダは、以下のメンバの和集合。
MACや署名によって完全性が保護されているヘッダ・パラメタを含むJSONオブジェクト。
認証系であれば公開鍵暗号化方式のRS256(RSA using SHA-256 hash)が良い。
キー付きハッシュである、alg=HS256(HMAC-SHA256)によるMAC付与
公開鍵暗号方式である、alg=RS256(RSA-SHA256)による署名を行う。
公開鍵暗号方式である、alg=ES256(ECDSA using P-256 and SHA-256)による署名を行う。
JWS Compact Serializationとの差異は以下。
JWS Compact Serializationとの差異は以下。
https://tools.ietf.org/html/rfc7515#appendix-A.1
https://tools.ietf.org/html/rfc7515#appendix-A.2
https://tools.ietf.org/html/rfc7515#appendix-A.3
すべての鍵に最低128ビットのエントロピーを使用する必要がある。
コンテキスト次第で、さらに多くのエントロピーが必要になる可能性がある。
仕様の外だが、以下を使用できる。
※ HS256はプレーンなHMACでMACではない(ややこしい)。
JWAを参照
ココの署名・暗号化アルゴリズムを使用すると良い。
以下が参考になる。
ココを見ると、
これで、実際にGoogle側での検証ができている。
上記のように、RFCを正確に理解していないとJWTライブラリ作成は難しいが、
JSON Web Tokens - jwt.ioなどの検証サイトを使用して検証できれば、及第点に達していると言える。
以下のように検証できる。
HS256は非常に単純で、署名に使用したキーのBase64(Base64Url)表現を指定する。
RS256は署名に使用した秘密鍵に対応する公開鍵を指定する。
私は、X.509証明書を利用したので、OpenSSLで公開鍵を取得して、それを貼り付けた所、検証ができた。
ポイントは、
と、ヘッダ・フッタ部分も貼り付ける必要がある所だろうか。
Tags: :IT国際標準, :認証基盤, :クレームベース認証, :暗号化