OIDC

OpenID Connect — 在 OAuth 2.0 之上做身份认证(Authentication)

OAuth 2.0 解决的是“授权(Authorization)”问题:第三方应用能在不知道你密码的情况下,代表你去访问你的数据。但它本身并不回答一个更基础的问题:“现在登录的是谁?” OIDC(OpenID Connect)就是为了解决这个问题而生的——它在 OAuth 2.0 的授权框架之上,增加了身份认证(Authentication)能力。

一句话概括:OAuth 2.0 管“你能做什么”,OIDC 管“你是谁”。

核心概念

OIDC 在 OAuth2 上的三处扩展

4 个角色(与 OAuth2 一致,只是职责更明确)

授权码模式 + OIDC 的流程

OIDC 最常用的是“授权码模式 + PKCE”,流程在 OAuth2 的 6 步之上多了“拿到 ID Token”这一步:

[ 用户 ] [ 依赖方 RP ] [ OP 认证服务器 ] [ UserInfo ]

| | | | |– 1. 登录 –>| | | |<– 2. 跳转登录页 —————-| | |– 3. 输密码同意 —————->| | |<– 4. 带回授权码 —————-| | | | | | | |– 5. 换 Token —>| | | |<– ID Token + Access Token ———-| | | | | |– 6. 带 Access Token 取资料 ——–>| | |<– 返回用户资料 ———————-|

关键区别:第 5 步换回来的响应里,除了 access_token,还会有一个 id_token。RP 校验签名后,直接从 id_token 里就能读出用户身份,不必再额外请求一次。

ID Token 里有什么(JWT Claims)

id_token 是一段 JWT,解码后是这样的字段(Claims):

为什么需要 OIDC 而不是直接用 OAuth2

与 OAuth2 的对比小结

维度OAuth 2.0OIDC
解决什么授权(你能访问什么)认证(你是谁)
核心令牌Access TokenAccess Token + ID Token
用户身份无标准定义标准 JWT Claims + UserInfo
典型场景第三方代你调 API用微信/Google 一键登录

Reference