#OpenID Connect
OpenID Connect Core 1.0のこと。
OAuth2.0を拡張したもの。OAuth2.0は認可のみの仕様であったため認証に関しては定義されていませんでした。
OpenID Connectは OAuth2.0をベースに認証部分の仕様を策定しました。
OAuth2.0は「RFC 6749」で定義されています。
RFC 6749: https://tools.ietf.org/html/rfc6749
OpenID Connectは RFCで定義されていないみたいですね。
仕様は以下。
OpenID Connect: http://openid-foundation-japan.github.io/openid-connect-core-1_0.ja.html#UserInfo
#目的
認証、認可、SSO(シングルサインオン)、ID連携
#概要
エンドユーザが IDプロバイダー上で認証を行い、生成された IDトークンをアプリ上で利用します。
アクセストークンも払い出しできます。
#用語
No | 用語 | 説明 |
---|---|---|
1 | OpenID Provider(OP) | IDトークン等をRP側に提供する |
2 | Relying Party(RP) | IDトークン等をOP側に要求する |
3 | ID Token | JSON形式の Web Token(JWT)、認証用のトークン |
4 | Access Token | アクセストークン、認可用 |
5 | UserInfo Endpoint | Clientは Access Token を用いて UserInfo Endpoint にEnd-User の Claim を要求する |
6 | Claim | IDトークンのユーザ属性情報 |
7 | Issuer |
#フロー
No | Response_type | Flow | 備考 |
---|---|---|---|
1 | code | Code flow | |
2 | id_token | Implicit flow | |
3 | id_token token | Hybrid flow | |
4 | code id_token | Hybrid flow | |
5 | code token | Hybrid flow | |
6 | code id_token token | Hybrid flow |
#Implicit flow
主にスクリプト言語を用いて実装されブラウザ上で動作する Client によって使用される
Implicit flowの場合、Token Endpointは利用されない。すべて Authorization Endpointからトークンが返される。
response_typeに「id_token」が利用される場合は ID Tokenのみ返却される。Access Tokenは返却されない。
「3.2. Authentication using the Implicit Flow」
#response_type
“code”、”token”はOAuth2.0の仕様。”id_token”はOpenID Connectの仕様。id_tokenを指定した場合は、IDトーンのみ返却される。「response_type」の値で何を返却されるかがわかる。
#scope
OpenID Connectの場合、scopeに”openid”を含める必要がある。scopeに”openid”が無い場合は、OAuth2.0の動作となる。
OAuth2.0の場合は、アクセストークンのみでIDトークンは提供されない。
#ID token Validation
Clientは ID Token の署名を, JOSE Header 中の alg Header Parameter で指定されたアルゴリズムを使い, JWS [JWS] に従って検証しなければならない (MUST).
nonce Claim の値が Authentication Request にて送られたものと一致することを確認しなければならない (MUST). Clientは nonce の値をリプレイアタック対策のためにチェックすべきである (SHOULD). リプレイアタック検知方法の詳細はClientによって異なる.
#OP(OpenID provider)
- OSS
- OpenAM ・・・入手が少し面倒
- KeyCloak
- サービス
- Yahoo
- AzureAD
- Auth0
#RP(Relying Party)
- 実装方法
- Nodejs+express