# (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のどの機能を使うかを動的に決定することができる(署名アルゴリズムなど)