OpenID Connect 總覽
OpenID Connect(OIDC)是建構在 OAuth 2.0 之上的身分驗證(Authentication)協定,由 OpenID Foundation 制定。它讓應用程式能夠驗證使用者的身分,並取得基本的個人資料。Google、Microsoft、LINE 等主要平台都已通過官方認證,支援 OIDC。
解決什麼問題
Section titled “解決什麼問題”OAuth 2.0 解決的是授權(Authorization)——「這個應用程式能不能存取我的資源?」但它沒有回答另一個問題:「目前登入的人到底是誰?」
舉個例子:當你用 Google 帳號登入某個第三方網站時,這個網站需要知道兩件事:
- 你是否確實擁有這個 Google 帳號(身分驗證)
- 它能存取你的哪些資料(授權)
OAuth 2.0 只處理第 2 點。OIDC 在 OAuth 2.0 的基礎上加了一層標準化的身分驗證機制,讓第 1 點也有明確的規範可循。
OIDC 重新定義了 OAuth 2.0 的四個角色:
| OAuth 2.0 | OpenID Connect | 說明 |
|---|---|---|
| Resource Owner | End-User | 最終使用者(在 OIDC 中一定是人) |
| Client | Relying Party(RP) | 依賴 OP 進行身分驗證的應用程式 |
| Authorization Server | OpenID Provider(OP) | 負責身分驗證並核發 ID Token |
| Resource Server | UserInfo Endpoint | 提供使用者資訊的端點 |
ID Token
Section titled “ID Token”ID Token 是 OIDC 的核心,它是一個 JWT(JSON Web Token),包含了使用者的身分資訊。與 Access Token 不同,ID Token 是給 RP 自己驗證用的,不是拿來存取 API 的。
一個 ID Token 至少包含以下 Claims:
| Claim | 說明 |
|---|---|
iss | 核發者(Issuer),即 OP 的 URL |
sub | 使用者的唯一識別碼(Subject) |
aud | 這個 Token 是核發給誰的(Audience),通常是 Client ID |
exp | Token 過期時間 |
iat | Token 核發時間 |
UserInfo Endpoint
Section titled “UserInfo Endpoint”除了 ID Token 中的基本資訊,RP 可以用 Access Token 向 UserInfo Endpoint 請求更多使用者資料,例如 email、name、picture 等。
OIDC 擴展了 OAuth 2.0 的 scope 機制。要發起 OIDC 請求,scope 中必須包含 openid,OP 才會核發 ID Token:
| Scope | 說明 |
|---|---|
openid | 必要。告訴 OP 這是一個 OIDC 身分驗證請求 |
profile | 請求使用者基本資料(name、nickname、picture 等) |
email | 請求使用者的 email 與 email 驗證狀態 |
address | 請求使用者的地址資訊 |
phone | 請求使用者的電話號碼 |
三種身分驗證流程
Section titled “三種身分驗證流程”OIDC 定義了三種身分驗證流程,對應不同的 response_type:
| 流程 | response_type | 適用場景 |
|---|---|---|
| Authorization Code Flow | code | 有後端的 Web 應用,最安全 |
| Implicit Flow | id_token 或 id_token token | 已不建議使用,同 OAuth 2.1 的建議 |
| Hybrid Flow | code id_token、code token、code id_token token | 需要在前端立即取得 ID Token 的場景 |
實務上,Authorization Code Flow + PKCE 是目前推薦的做法,與 OAuth 2.1 的方向一致。
Discovery
Section titled “Discovery”OIDC 定義了標準的 Discovery 機制,讓 RP 可以自動取得 OP 的設定資訊。只要知道 Issuer 的 URL,就能透過 /.well-known/openid-configuration 取得所有必要的端點與支援的功能。
例如:
- Google:
https://accounts.google.com/.well-known/openid-configuration - LINE:
https://access.line.me/.well-known/openid-configuration
與 OAuth 2.0 的關係
Section titled “與 OAuth 2.0 的關係”OIDC 不是 OAuth 2.0 的替代品,而是它的擴展。所有 OIDC 的流程都是在 OAuth 2.0 的基礎上運作的:
- OAuth 2.0 負責授權,核發 Access Token
- OIDC 加上身分驗證,額外核發 ID Token
- 兩者共用相同的端點(Authorization Endpoint、Token Endpoint)
簡單來說:OAuth 2.0 + 身分驗證 = OpenID Connect。