SP 是什么
一句话总结
SP(Service Provider,服务提供者)就是 SSO 体系里那些”自己不存密码、信任 IDP”的应用。Grafana、Outline、n8n 配上 OIDC 都是 SP。
🤔 为什么会有它 / 解决了什么问题
每个应用如果自己管登录,就要自己写登录页面、存密码哈希、处理密码重置、防暴力破解……每个开发团队重复造这些轮子,而且很容易造出安全漏洞。
SP 模式把”验证身份”外包给 IDP,应用开发者只需要关心业务逻辑,不用再实现一套登录系统。
🔍 具体原理 / 运作逻辑
SP 的核心行为:
- 检测未登录:用户访问时,SP 发现没有有效会话
- 重定向到 IDP:把用户浏览器跳转到 IDP 的登录页
- 接收令牌:用户登完 IDP,浏览器带着令牌回到 SP
- 验证令牌:SP 检查令牌的签名、有效期,确认没有被篡改
- 建立本地会话:确认身份后,SP 创建自己的 Session/Cookie,后续请求不再跳转
在我们的架构里,Grafana、Outline、n8n 都是 SP——它们配了 OIDC 后,用户点开 URL 会自动跳 Frappe 登录页。
更硬核的技术细节(点击展开)
SP 验证 ID Token 的方式:
- HS256:用 OAuth Client 的
client_secret做 HMAC 签名验证- RS256:用 IDP 的公钥验证(Frappe 目前只支持 HS256)
- SP 还会检查
aud(audience,接收方)必须是自己,exp(过期时间)必须在未来
🧭 什么情况下会用到 / 什么场景会遇到它
- 公司内部任何你不用单独注册账号就能打开的应用
- 点击”用 Google/微信 登录”时,那个第三方网站就是 SP
- 我们即将进行的:给 Grafana 配 OIDC,让它变成 Frappe 的 SP
🔗 关联 / 经常一起出现的概念
- SSO 概述:SP 是 SSO 三要素之一
- IDP:IDP 负责签发令牌,SP 负责接收和信任令牌
- OIDC:SP 和 IDP 之间聊天的语言
- Authorization Code Flow:SP 最常用的认证流程
⚠️ 注意事项 / 常见误区
- SP 不存用户密码,但有它自己的 Session。IDP 改了密码,SP 的旧 Session 可能要等过期或手动踢掉
- 不是所有应用都支持当 SP。选型时检查它是否支持 OIDC 或 SAML
📎 记忆锚点
SP = 商场里的店铺。店铺不设保安,顾客拿着公安局发的身份证进门就行。
📝 更新日志
| 日期 | 改动 | 原因 |
|---|---|---|
| 2026-07-09 | 首次创建 | Frappe SSO/OIDC 集成准备 |