51 views
# (OpenID Connect Core 1.0) 15. Imprementation Considerations - 15.4 Mandatory to Implement Features for Relying Parties ###### tags: `oauth2/oidc` 担当::@hijiki51: [toc maxlevel=5] OP/RP を実装する際に必ず実装しなければならない機能 ## 15.1 Mandatory to Implement Features for All OpenID Providers OP は以下の機能の**すべて**を実装しなければならない。(**MUST**) - RSA SHA-256(`RSA256`) での署名 - ただし、ID Tokenがトークンエンドポイントから**のみ**返却される時かつ、ClientにID Tokenの署名アルゴリズムとして`none`のみをサポートしているときに限り実装しなくてもよい - つまり `response_type=id_token`をサポートしない&ID Tokenに署名しないとき - どういう状況? - 組み込みとか署名処理が負荷になるところではあり得るのか? - これ普通に見落として実装ミスしやすい(楕円暗号でええやろ!をすると仕様違反になる) - `prompt`パラメータのサポート - `display` パラメータのサポート - 使用言語要求へのサポート - UIもしくは Claim で用いる言語について `ui_locales` , `claims_locales`での要求を受け付けなければいけない - ただし、言語に必ずしも対応する必要はなく、エラーを返さなければ実装としては十分である。 - `auth_time`のサポート - 要求された場合には必ず返却しなければならない - `acr_values` - 要求された場合には必ず返却しなければならない - ただし、適切な値を常に返す必要はなく、エラーを返さなければ実装としては十分である。 ## 15.2 Mandatory to Implement Features for Dynamic OpenID Providers 事前に情報の登録なしで OP-RP 間の接続を可能にするためには 15.1 節の仕様に加え、以下の仕様を**すべて**実装する必要がある。(**MUST**) - `response_type=id_token`のサポート - Self-Issued OP 以外は `code`, `id_token token`もサポートしなければならない - OpenID Connect Discovery のサポート - Dynamic Client Registration のサポート - 発行したすべてのアクセストークンに対しUserInfo Endpoint へのアクセス許可 - ただし、Self-Issued OP はアクセストークンを発行してはならない - JWK 形式での 公開鍵の配布 - X.509 形式での配布を伴ってもよい(**MAY**) - `request_uri`パラメータのサポート - `request_uri`から取得されるRequest Object でのリクエストのサポート ## 15.3 Discovery and Registration OP, RPについて必ず事前に設定する場合、OpenID Connect Discovery や OpenID Connect Dynamic Registration は必要ないかもしれない。 しかし、その実装をしたくなった場合は OpenID Connect Discovery 及び OpenID Connect Dynamic Registration に従って実装すること(**SHOULD**) ## 15.4 Mandatory to Implement Features for Relying Parties 一般に、OP とのやり取りについてどの機能を使うかは RP が任意に決定してよい。 例えば Confidential Client であれば Authorization Code Flow が適切であるし、Public / Native Client であれば、Implicit Flow が適切である。 :::info 今であればPublic/Native Client であっても PKCE+Code flow が適切 ::: OIDCの機能を使うとき、"REQUIRED", "MUST"と書かれた機能はRPに実装する必要がある。その一方で、"OPTIONAL"と書かれた機能は使う予定がない場合、実装しなくてもよい。 最後に、OpenID Connect Discovery をサポートする場合、Discovery Endpoint を用いることで、RPがOPのどの機能を使うかを動的に決定することができる(署名アルゴリズムなど)