「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。 -[[戻る>OpenID Connect]] * 目次 [#ef2c8581] #contents *概要 [#v62f12c1] [[JWT]] の [[JWS]] or [[JWE]] を使用する。 *詳細 [#ge588acf] **共通 [#x7229242] ***共通鍵暗号化方式 [#e5523f68] -audクレームに含まれる client_id に対応する~ client_secret の UTF-8 オクテットを使用する。 -aud が複数要素の配列の場合の振る舞いは規定されない~ (azpのclient_id に対応する client_secretで暗号化されている可能性がある)。 ***公開鍵暗号化方式 [#j91b8b04] -公開鍵は[[JWK Set>JWK#od5799a4]]で公開する必要がある。 -[[JWK Set>JWK#od5799a4]]中に複数の鍵がある場合、[[JWS]]・[[JWE]]ヘッダにkidが必要。 **署名([[JWS]]) [#o03ae7d8] ***共通鍵暗号化方式 [#mbbefc9e] MACベースの署名 -鍵には、[[client_secretを用いた共通鍵>#e5523f68]]を使用する。 -[[JWS]]ヘッダに alg パラメタ値を設定 -[[MAC 鍵>#e5523f68]]は、アルゴリズムの最低限のオクテット長を持つ必要がある。 --例えばHS256では, 最低でも32オクテットが必要になる。 --アルファベットに限定される場合、それ以上のオクテットが必要となる。 ***公開鍵暗号化方式 [#qfdd7483] RSAおよびECDSAの署名 -鍵には、[[JWK Setで公開された公開鍵>#j91b8b04]]を使用する。 -[[JWS]]ヘッダに alg パラメタ値を設定 **暗号化([[JWE]]) [#f27913d9] ***共通鍵暗号化方式 [#b1a871e7] -[[鍵>#e5523f68]]をハッシュし切り詰めた左側を使用する。 -ハッシュ・アルゴリズムは、以下を用いる。 --256ビット以下の鍵には SHA-256 --257-384ビットの鍵には SHA-384 --385-512ビットの鍵には SHA-512 -例えば --A128KW~ SHA-256ハッシュを切り詰めて128ビットを取り出す。 --512ビット以上の鍵が必要になった場合~ client_secretから鍵を導出する何らかの拡張仕様を定義する。 ***公開鍵暗号化方式 [#v10f5f1a] -RSA~ ランダムな Content Encryption Key によって[[JWS]]をRSA暗号化アルゴリズムで暗号化する。 -Elliptic Curve~ --[[JWE]]ヘッダの epk に指定する短命な Elliptic Curve公開鍵を生成する。 --ECDH-ES アルゴリズムを用いContent Encryption Keyの鍵を交換し、[[JWS]]を暗号化する。 --[[ECDH-ES>暗号化アルゴリズム#j46c8e11]]アルゴリズムを用いContent Encryption Keyの鍵を交換し、[[JWS]]を暗号化する。 **鍵のローテーション [#tdf4ee76] -jwks_uri + [[JWK Set>JWK#od5799a4]] + kidでローテーションする。 -Cache-Control ヘッダに max-age を含め[[JWK Set>JWK#od5799a4]]のキャッシュを適切にコントロールする。 ***署名 [#mc831a6c] 署名者がローテーションを行う。 -署名者は、 --jwks_uriで、秘密鍵に対応する公開鍵のセットを[[JWK Set>JWK#od5799a4]]として公開する。 --[[JWS]]ヘッダに、署名に使用した公開鍵([[JWK Set>JWK#od5799a4]]中の kid)を含める -検証者は、 --jwks_uriで指定した場所から[[JWK Set>JWK#od5799a4]]を取得する。 --[[JWS]]ヘッダの kid から署名に使用した公開鍵を、上記の[[JWK Set>JWK#od5799a4]]中から取得する。 --取得した公開鍵を使用して署名の検証を行う。 ***暗号化 [#q3cf4c4c] 復号化を行う主体がローテーションを行う。~ (古い鍵が使用される可能性があるため、鍵を暫く保持する)。 -復号化を行う主体は、 --jwks_uriで、秘密鍵のセットを[[JWK Set>JWK#od5799a4]]として公開する。 -暗号化を行う主体は、 --jwks_uriで指定した場所から[[JWK Set>JWK#od5799a4]]を取得する。 --[[JWE]]ヘッダに、暗号化に使用した秘密鍵([[JWK Set>JWK#od5799a4]]中の kid)を含める。 -復号化を行う主体は、 --[[JWE]]ヘッダの kid から暗号化に使用した秘密鍵を、上記の[[JWK Set>JWK#od5799a4]]中から取得する。 --取得した秘密鍵を使用して復号化を行う。 *参考 [#x69f7dcb] -Final: OpenID Connect Core 1.0 incorporating errata set 1 > 10. Signatures and Encryption~ https://openid-foundation-japan.github.io/openid-connect-core-1_0.ja.html#ClientAuthentication **[[暗号化アルゴリズム]] [#q0079dd6] **[[JWT]], [[JWS]], [[JWE]], [[JWK]], [[JWA]] [#abf90d3b] ---- Tags: [[:IT国際標準]], [[:認証基盤]], [[:クレームベース認証]], [[:OAuth]]