「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。

-[[戻る>OpenID Connect]]

* 目次 [#id1b4e21]
#contents

*概要 [#m08d530a]
Finalを参照して記述。

-IdP/STS(OP)は、[[SIOP>#r2b2ef68]]として動作する。

-[[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
    &registration=%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 Connect Self-Issued IdPを応用したSingle Sign Onの実装 - Speaker Deck~
https://speakerdeck.com/rtechkouhou/openid-connect-self-issued-idpwoying-yong-sitasingle-sign-onfalseshi-zhuang

**Qiita [#xaa07c7f]
-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]]

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS