跳到內容

OpenID Connect 總覽

OpenID Connect(OIDC)是建構在 OAuth 2.0 之上的身分驗證(Authentication)協定,由 OpenID Foundation 制定。它讓應用程式能夠驗證使用者的身分,並取得基本的個人資料。Google、Microsoft、LINE 等主要平台都已通過官方認證,支援 OIDC。

OAuth 2.0 解決的是授權(Authorization)——「這個應用程式能不能存取我的資源?」但它沒有回答另一個問題:「目前登入的人到底是誰?」

舉個例子:當你用 Google 帳號登入某個第三方網站時,這個網站需要知道兩件事:

  1. 你是否確實擁有這個 Google 帳號(身分驗證
  2. 它能存取你的哪些資料(授權

OAuth 2.0 只處理第 2 點。OIDC 在 OAuth 2.0 的基礎上加了一層標準化的身分驗證機制,讓第 1 點也有明確的規範可循。

OIDC 重新定義了 OAuth 2.0 的四個角色:

OAuth 2.0OpenID Connect說明
Resource OwnerEnd-User最終使用者(在 OIDC 中一定是人)
ClientRelying Party(RP)依賴 OP 進行身分驗證的應用程式
Authorization ServerOpenID Provider(OP)負責身分驗證並核發 ID Token
Resource ServerUserInfo Endpoint提供使用者資訊的端點

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
expToken 過期時間
iatToken 核發時間

除了 ID Token 中的基本資訊,RP 可以用 Access Token 向 UserInfo Endpoint 請求更多使用者資料,例如 emailnamepicture 等。

OIDC 擴展了 OAuth 2.0 的 scope 機制。要發起 OIDC 請求,scope 中必須包含 openid,OP 才會核發 ID Token:

Scope說明
openid必要。告訴 OP 這是一個 OIDC 身分驗證請求
profile請求使用者基本資料(name、nickname、picture 等)
email請求使用者的 email 與 email 驗證狀態
address請求使用者的地址資訊
phone請求使用者的電話號碼

OIDC 定義了三種身分驗證流程,對應不同的 response_type

流程response_type適用場景
Authorization Code Flowcode有後端的 Web 應用,最安全
Implicit Flowid_tokenid_token token已不建議使用,同 OAuth 2.1 的建議
Hybrid Flowcode id_tokencode tokencode id_token token需要在前端立即取得 ID Token 的場景

實務上,Authorization Code Flow + PKCE 是目前推薦的做法,與 OAuth 2.1 的方向一致。

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

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