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

目次

概要

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

構成要素

JOSEヘッダ

JWSの基本的な(≒JWS Compact Serializationの場合の)ヘッダには、以下のものがある。

RS256

秘密鍵で検証可能なHS256(HMAC using SHA-256 hash)

{
  "alg": "HS256",
  "typ": "JWT"
}

HS256

公開鍵で検証可能なRS256(RSA using SHA-256 hash)

{
  "alg": "RS256",
  "typ": "JWT"
}

ES256

公開鍵で検証可能なES256(ECDSA using P-256 and SHA-256)

{
  "alg": "ES256",
  "typ": "JWT"
}

JWKをサポートする場合

jwk, kid & jkuなどのパラメタを追加する。

証明書をサポートする場合

PE​​Mエンコード形式

その他

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

署名

詳細

表現(エンコード)

JWS Compact Serialization

多くの場合は、この表現(エンコード)。

※ 殆どの場合、こちらが使用されている。

JWS JSON Serialization

保護ヘッダ・非保護ヘッダ

保護ヘッダ

MACや署名によって完全性が保護されているヘッダ・パラメタを含むJSONオブジェクト。

非保護ヘッダ

アルゴリズム

認証系であれば公開鍵暗号化方式のRS256(RSA using SHA-256 hash)が良い。

RS256

公開鍵暗号方式である、alg=RS256(RSA-SHA256)による署名を行う。

HS256

キー付きハッシュである、alg=HS256(HMAC-SHA256)によるMAC付与

ES256

公開鍵暗号方式である、alg=ES256(ECDSA using P-256 and SHA-256)による署名を行う。

JWAを確認

手順

作成

JWS Compact Serializationの場合

JWS JSON Serializationの場合

JWS Compact Serializationとの差異は以下。

検証

JWS Compact Serializationの場合

JWS JSON Serializationの場合

JWS Compact Serializationとの差異は以下。

検証サイト

下記参照

セキュリティに関する考慮事項

鍵エントロピー

すべての鍵に最低128ビットのエントロピーを使用する必要がある。
コンテキスト次第で、さらに多くのエントロピーが必要になる可能性がある。

ランダム値

鍵の識別

仕様の外だが、以下を使用できる。

JOSEヘッダ中のJWK

JOSEヘッダ中の証明書

鍵の保護、発信元認証

MAC

署名

署名とMACの違い

MAC

※ HS256はプレーンなHMACでMACではない(ややこしい)。

署名

暗号の敏捷性

JWAを参照

自作ライブラリ

署名・暗号化アルゴリズム

ココの署名・暗号化アルゴリズムを使用すると良い。

KeyedHashAlgorithm?

AsymmetricAlgorithm?

参考サイト

以下が参考になる。

ココを見ると、

これで、実際にGoogle側での検証ができている。

検証サイト

上記のように、RFCを正確に理解していないとJWTライブラリ作成は難しいが、
JSON Web Tokens - jwt.ioなどの検証サイトを使用して検証できれば、及第点に達していると言える。

以下のように検証できる。

手順

  1. 左ペイン(Encoded)にJWTの文字列を貼り付ける。
  2. すると、入力したJWTから、ペイン(Dencoded)のHeader、Payloadに自動的に表示がなされる。
  3. 次に、上部 ALGORITHM selectbox から、Headerに表示された"alg"と同じアルゴリズムを選択する。
  4. 最後に、VERIFY SIGNATUREに、署名の検証に使用するキーを入力する(HS256の場合RS256の場合で異なる)。

HS256の場合

HS256は非常に単純で、署名に使用したキーのBase64(Base64Url)表現を指定する。

HS256

RS256の場合

RS256は署名に使用した秘密鍵に対応する公開鍵を指定する。
私は、X.509証明書を利用したので、OpenSSLで公開鍵を取得して、それを貼り付けた所、検証ができた。

ポイントは、

と、ヘッダ・フッタ部分も貼り付ける必要がある所だろうか。

RS256

Open棟梁

参考

JWA - JWS用

暗号化アルゴリズム

.NETの署名・暗号化アルゴリズム


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


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