OIDC 是什么
一句话总结
OIDC(OpenID Connect)是跑在 OAuth 2.0 上面的一层身份认证协议。OAuth 负责”给房卡”,OIDC 负责”同时给你一张身份证”——让你不仅能进门,还能证明你是谁。
🤔 为什么会有它 / 解决了什么问题
OAuth 2.0 推出后,很多人把它当认证协议用——“用 Google 登录”其实就是 OAuth,但 OAuth 从来没定义过”这个用户叫啥、邮箱是什么”的标准格式。每个平台返回的用户信息字段都不一样,集成一次就要适配一次。
OIDC 就是在 OAuth 2.0 上面标准化了这一层:
- 定义了 ID Token 的格式(JWT,字段名统一)
- 定义了 UserInfo Endpoint(拿用户详细信息的标准接口)
- 定义了
.well-known/openid-configuration(自动发现所有端点)
一句话:OAuth 2.0 管授权,OIDC 管认证。你需要的 SSO 是 OIDC,不是纯 OAuth。
🔍 具体原理 / 运作逻辑
OIDC 跑 OAuth 2.0 的 Authorization Code Flow,但在最后一步多返回了一个 ID Token。这个 ID Token 是一个 JWT,里面写着:
{
"sub": "用户唯一ID",
"email": "user@example.com",
"name": "张三",
"iss": "https://frappe站点地址",
"aud": "客户端ID",
"exp": 1234567890
}SP(Grafana)拿到 ID Token 后,验签 + 检查过期时间,然后从 email 字段就知道”哦,是张三来了”,放行。
更硬核的技术细节(点击展开)
OIDC 在 OAuth 2.0 基础上加的标准化内容:
- ID Token(JWT):包含
sub、iss、aud、exp、iat,还有可选的name、picture- UserInfo Endpoint:
GET /userinfo,用 Access Token 调用,返回更多用户属性- Discovery:
GET /.well-known/openid-configuration,返回所有端点 URL- Claims:标准化的用户属性名(
email_verified、given_name、family_name)- Signing Algorithm:Frappe 用的是 HS256(对称密钥,secret 做 HMAC),商业 IDP 多用 RS256(非对称,公私钥)
🧭 什么情况下会用到 / 什么场景会遇到它
- 给任何第三方应用配”统一登录”时,你填的
auth_url、token_url就是 OIDC 端点 - 所有标榜”支持 OpenID Connect”的应用都可以直接对接 Frappe
- 我们要做的 Frappe SSO 就是 OIDC 的典型应用场景
🔗 关联 / 经常一起出现的概念
- OAuth 2.0:OIDC 的底层授权框架
- SSO 和 OIDC 的关系:SSO 是目标,OIDC 是手段
- ID Token:OIDC 最核心的令牌,包含身份信息
- Authorization Code Flow:OIDC 使用的认证流程
- PKCE:OIDC 推荐的安全加固
⚠️ 注意事项 / 常见误区
- OIDC 和 OAuth 2.0 经常被混用。“用 Google 登录”其实是 OIDC,不是纯 OAuth
- Frappe 的 OIDC 签名算法是 HS256(不是 RS256),配外部应用时注意检查它是否支持 HS256
redirect_uri必须精确匹配,protocol/host/path 一个字符都不能错
📎 记忆锚点
OAuth = 酒店前台给你房卡。OIDC = 前台给你房卡的同时,还在卡上印了你的名字和照片。
📝 更新日志
| 日期 | 改动 | 原因 |
|---|---|---|
| 2026-07-09 | 首次创建 | Frappe SSO/OIDC 集成准备 |