OpenID Connect
OAuth 2.0 の上に構築された認証レイヤーで、ユーザーの身元情報を ID トークンとして提供する
OpenID Connect とは
OpenID Connect (OIDC) は、OAuth 2.0 の上に構築された認証レイヤーである。OAuth 2.0 が「認可」(何にアクセスできるか) を扱うのに対し、OIDC は「認証」(誰であるか) を扱う。認証成功時に ID トークン (JWT) を発行し、ユーザーの身元情報をクライアントに提供する。2014 年に OpenID Foundation が策定した。
OAuth 2.0 との違い
OAuth 2.0 との違いを以下にまとめる。
| 観点 | OAuth 2.0 | OpenID Connect |
|---|---|---|
| 目的 | 認可 (リソースへのアクセス許可) | 認証 (ユーザーの身元確認) |
| トークン | アクセストークン | ID トークン + アクセストークン |
| ユーザー情報 | 標準化されていない | UserInfo エンドポイントで標準化 |
| スコープ | read, write など任意 |
openid, profile, email |
OAuth 2.0 だけでは「このアクセストークンは誰のものか」が分からない。OIDC の ID トークンにユーザー情報が含まれる。
ID トークン (JWT)
ID トークン (JWT) の例を示す。
{
"iss": "https://cognito-idp.ap-northeast-1.amazonaws.com/ap-northeast-1_xxxxx",
"sub": "user-123",
"aud": "client-id",
"exp": 1711900800,
"iat": 1711897200,
"email": "user@example.com",
"name": "Alice",
"email_verified": true
}
| クレーム | 説明 |
|---|---|
iss |
発行者 (IdP の URL) |
sub |
ユーザーの一意識別子 |
aud |
対象のクライアント ID |
exp |
有効期限 |
email |
メールアドレス |
認証フロー (認可コード + PKCE)
認証フロー (認可コード + PKCE) を図で示す。
1. クライアントが認可リクエスト (scope: openid profile email)
2. ユーザーが IdP でログイン
3. IdP が認可コードを返す
4. クライアントが認可コードをトークンエンドポイントに送信
5. IdP が ID トークン + アクセストークンを返す
6. クライアントが ID トークンを検証 (署名、exp、aud)
7. UserInfo エンドポイントで追加情報を取得 (オプション)
Cognito での OIDC
Cognito User Pool は OIDC プロバイダーとして機能する。
// Cognito の OIDC エンドポイント
// 発見: https://<domain>/.well-known/openid-configuration
// 認可: https://<domain>/oauth2/authorize
// トークン: https://<domain>/oauth2/token
// UserInfo: https://<domain>/oauth2/userInfo
// JWKS: https://<domain>/.well-known/jwks.json
OIDC Discovery
.well-known/openid-configuration エンドポイントで、IdP の設定情報 (認可エンドポイント、トークンエンドポイント、JWKS URI) を自動取得できる。クライアントは IdP の URL だけ知っていれば、残りの設定を自動的に取得する。
SAML との比較
SAML との主な違いを以下に比較する。
| 観点 | OIDC | SAML 2.0 |
|---|---|---|
| データ形式 | JSON / JWT | XML |
| 用途 | Web / モバイル | エンタープライズ SSO |
| 実装の複雑さ | 低い | 高い |
| モバイル対応 | 適している | 不向き |
新規プロジェクトでは OIDC が推奨される。
OpenID Connect については関連書籍でも詳しく扱われている。
この記事は役に立ちましたか?
関連用語
OAuth 2.0
ユーザーのパスワードを渡さずに、リソースへの限定的なアクセスを許可する認可フレームワーク
JWT
JSON Web Token の略で、署名付きの JSON でユーザー情報を安全に伝達するトークン形式
Amazon Cognito
Web・モバイルアプリに認証・認可機能を追加する AWS マネージドサービス
ケイパビリティベースセキュリティ
リソースへのアクセス権を偽造不可能なトークン (ケイパビリティ) として管理するセキュリティモデル
リフレッシュトークン
アクセストークンの有効期限切れ後に、再認証なしで新しいアクセストークンを取得するためのトークン
PKCE
OAuth 2.0 の認可コードフローを、クライアントシークレットなしで安全に実行するための拡張