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 字段就知道”哦,是张三来了”,放行。


🧭 什么情况下会用到 / 什么场景会遇到它

  • 给任何第三方应用配”统一登录”时,你填的 auth_urltoken_url 就是 OIDC 端点
  • 所有标榜”支持 OpenID Connect”的应用都可以直接对接 Frappe
  • 我们要做的 Frappe SSO 就是 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 集成准备