「[[マイクロソフト系技術情報 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 (audience) Claim に含まれる client_id に対応する~
-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が必要。

**署名 [#o03ae7d8]
**署名([[JWS]]) [#o03ae7d8]

***共通鍵暗号化方式 [#mbbefc9e]
-MACベースの署名
MACベースの署名

-鍵には、[[client_secretを用いた共通鍵>#e5523f68]]を使用する。

-[[JWS]]ヘッダに alg パラメタ値を設定

-[[MAC 鍵>#e5523f68]]は、アルゴリズムの最低限のオクテット長を持つ必要がある。
--例えばHS256では, 最低でも32オクテットが必要になる。
--アルファベットに限定される場合、それ以上のオクテットが必要となる。

***公開鍵暗号化方式 [#qfdd7483]
-RSAおよびECDSA署名
RSAおよびECDSAの署名

-鍵には、[[JWK Setで公開された公開鍵>#j91b8b04]]を使用する。

-[[JWS]]ヘッダに alg パラメタ値を設定

**暗号化 [#f27913d9]
**暗号化([[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]]


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