「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。 -[[戻る>OpenID Connect]] * 目次 [#id1b4e21] #contents *概要 [#m08d530a] Finalを参照して記述。 -[[Implicit Flow>OpenID Connect#e7adf5c2]]で自己署名の[[IDトークン>OpenID Connect#ofb73c59]]だけ発行する。 -以下が、通常の[[Implicit Flow>OpenID Connect#e7adf5c2]]とは異なる。 --[[認可リクエスト>#q1b6f89c]] --[[IDトークン>#a7b29a9b]] *詳細 [#h3256440] **SIOP [#r2b2ef68] ***機能 [#dd18bd4c] OpenID Connect Self-issued OP(SIOP)は、~ 端末上で動作して、[[IDトークン>OpenID Connect#ofb73c59]]を発行することで、 -SIOPが動作する端末自体の識別(端末認証) -安全な端末情報の受け渡し(改ざんを検出可能)。 を実現する機能を提供すると言える。 ***Discovery [#b9068246] 以下の Dynamic Discovery を得たかのように振る舞う。 { "authorization_endpoint": "openid:", "issuer": "https://self-issued.me", "scopes_supported": ["openid", "profile", "email", "address", "phone"], "response_types_supported": ["id_token"], "subject_types_supported": ["pairwise"], "id_token_signing_alg_values_supported": ["RS256"], "request_object_signing_alg_values_supported": ["none", "RS256"] } ※ Discovery Process で入力された識別子が self-issued.me ドメインを含んでいた場合. ***Registration [#qeefd9f2] 以下の Client Registration Response を得たかのように振る舞う。 -client_id~ Client の redirect_uri 値. -client_secret_expires_at~ 0 **認可リクエスト & レスポンス [#icd39848] ***認可リクエストの例 [#q1b6f89c] 以下のRedirectレスポンスから認可リクエスト。 -Authorization Endpoint~ カスタムURLスキーム(openid://) -パラメタ --REQUIRED ---scope="* openid *" ---response_type="id_token" ---client_id は redirect_uri の値 --OPTIONAL ---claims ---request ---registration ★ ---id_token_hint ★ ---他のパラメータも送ってもよい HTTP/1.1 302 Found Location: openid://? response_type=id_token &client_id=https%3A%2F%2Fclient.example.org%2Fcb &scope=openid%20profile &state=af0ifjsldkj &nonce=n-0S6_WzA2Mj ®istration=%7B%22logo_uri%22%3A%22https%3A%2F%2Fclient.example.org%2Flogo.png%22%7D ※ 全体 URL 長は ASCII で 2048 文字を超えてはならない (MUST NOT). ***認可レスポンスの例 [#b9d085e5] 通常の[[Implicit Flow>OpenID Connect#e7adf5c2]]と同じ。 **[[IDトークン>OpenID Connect#ofb73c59]] [#a7b29a9b] ***差異 [#oc9e7f00] 通常の[[Implicit Flow>OpenID Connect#e7adf5c2]]との差異 -iss~ 「https://self-issued.me」固定 -sub~ sub_jwkの&color(red){公開鍵};の拇印のBase64urlエンコード(JWK Thumbprint参照) -sub_jwk --[[SIOP>#r2b2ef68]]が発行する[[IDトークン>OpenID Connect#ofb73c59]]に含まれるパラメタ。 --[[IDトークン>OpenID Connect#ofb73c59]]自身の署名検証に使われる公開鍵を[[JWK]]形式で保持。 ***例 [#w6969438] { "iss": "https://self-issued.me", "sub": "wBy8QvHbPzUnL0x63h13QqvUYcOur1X0cbQpPVRqX5k", "aud": "https://client.example.org/cb", "nonce": "n-0S6_WzA2Mj", "exp": 1311281970, "iat": 1311280970, "sub_jwk": { "kty":"RSA", "n": "0vx7agoebGcQSuuPiLJXZptN9nndrQmbXEps2aiAFbWhM78LhWx 4cbbfAAtVT86zwu1RK7aPFFxuhDR1L6tSoc_BJECPebWKRXjBZCiFV4n3oknjhMs tn64tZ_2W-5JsGY4Hc5n9yBXArwl93lqt7_RN5w6Cf0h4QyQ5v-65YGjQR0_FDW2 QvzqY368QQMicAtaSqzs8KJZgnYb9c7d0zgdAZHzu6qMQvRL5hajrn1n91CbOpbI SD08qNLyrdkt-bFTWhAI4vMQFh6WeZu0fM4lFd2NcRwr3XPksINHaQ-G_xBniIqb w0Ls1jF44-csFCur-kEgU8awapJzKnqDKgw", "e":"AQAB" } } *応用 [#caf9a119] この仕組み をどう応用していくか?がポイントになる。 **Recruit ID [#nda5de0e] [[OAuth PKCE]]と併用(というより[[OAuth PKCE]]で[[SIOP>#r2b2ef68]]を併用して強化するイメージ) -Recruit IDは、OP(IdP/STS)だが、Self-Issued OP(オプション)を使う時にはRPになる。 -Public Clientで認証する際に、Client Credentialを持てないPublic Client自体の認証が可能。~ (sub = 証明書の拇印の値をRecruit IDのアカウントとの紐付ける) -なお、秘密鍵は、Shared KeyChain(iOSの証明書ストアらしい)で管理する。 **・・・ [#x7c0f475] *参考 [#ic398767] -Final: OpenID Connect Core 1.0 incorporating errata set 1 > 7. Self-Issued OpenID Provider~ http://openid.net/specs/openid-connect-core-1_0.html#SelfIssued -OpenID Connecr Self-Issued OP(IdP) の仕様と応用~ https://qiita.com/ritou/items/a9649bd76ccd7aa50d90 -OpenID Connect Self-issued OP概要 ~OpenID Technight #15より~ https://qiita.com/SAM-l/items/93b56c6061cfbb6653ec ---- Tags: [[:IT国際標準]], [[:認証基盤]], [[:クレームベース認証]], [[:OAuth]]