IDP 是什么
一句话总结
IDP(Identity Provider,身份提供者)是 SSO 体系里的”公安局”——它存着所有人的账号密码,负责验证你是谁,然后给各个应用签发身份令牌。
🤔 为什么会有它 / 解决了什么问题
没有 IDP 时,每个应用自己存密码、自己验证用户。这带来三个问题:
- 密码散落各处:用户要在 10 个地方设密码,安全风险极高
- 账号管理噩梦:HR 招一个人,IT 要在 10 个系统创建账号;离职要逐一注销
- 安全审计不可能:谁什么时间登录了什么系统,没法集中追踪
IDP 把”验证身份”这个职责从每个应用中抽离出来,集中到一个专门的服务。管身份的事,只由专业的人/系统来做。
🔍 具体原理 / 运作逻辑
IDP 的核心工作流程:
- 存储用户:维护一个用户目录(用户名、邮箱、密码哈希、角色)
- 验证身份:你输入密码,IDP 判断对不对
- 签发令牌:验证通过后,发一张”身份令牌”(ID Token)给应用
- 会话管理:记住你登录了,下次不必重复输入
在我们的架构里,Frappe 就是 IDP。Frappe 的 User Doctype 存用户,OAuth Provider 模块负责签发令牌。
更硬核的技术细节(点击展开)
IDP 还有几个关键能力:
- Session 管理:维护用户的登录会话,支持单点登出(SLO)
- MFA(多因素认证):除了密码,还要求验证码/硬件密钥
- Federation(联合身份):一个 IDP 可以信任另一个 IDP(比如用 Google 登录第三方网站)
- User Provisioning:自动在应用中创建/更新/删除用户(SCIM 协议)
🧭 什么情况下会用到 / 什么场景会遇到它
- 搭建公司内部 SSO 时,需要选一个系统当 IDP
- 接入第三方登录时(“用 Google 登录”按钮),Google 就是 IDP
- 任何需要统一管理用户身份的地方
⚖️ 副作用 / 代价 / 取舍
- 单点故障:IDP 是 SSO 的唯一依赖,它挂了 = 全员登不进去
- 安全集中:攻击者最想攻破的就是 IDP,因为拿到它就拿到了所有系统
- 性能瓶颈:每次认证请求都经过 IDP,需要保证它有足够的资源
🕰️ 来历
- 早期的 LDAP(轻量目录访问协议,1993)和 Kerberos(MIT,1980s)就是 IDP 的雏形
- 现代 IDP 的概念伴随 SAML(2005)和 OIDC(2014)成熟
- 商业 IDP 代表:Okta、Azure AD、Auth0
- 开源 IDP 代表:Keycloak、Authentik、Frappe 内置 OAuth Provider
🔗 关联 / 经常一起出现的概念
- SSO 概述:IDP 是 SSO 三要素之一(IDP + SP + 协议)
- SP:IDP 的另一半,负责信任 IDP 的令牌并放行
- OIDC:IDP 和 SP 之间通信的主流协议
- Access Token:IDP 签发的”房卡”,用来调用 API
⚠️ 注意事项 / 常见误区
- IDP 不是应用本身,它只管”你是谁”,不管”你能干什么”
- 不要把 IDP 和用户目录混为一谈——IDP 包含了认证逻辑,不只是存用户
📎 记忆锚点
IDP = 公安局。你只去公安局办一次身份证,然后拿着身份证走遍天下。
📝 更新日志
| 日期 | 改动 | 原因 |
|---|---|---|
| 2026-07-09 | 首次创建 | Frappe SSO/OIDC 集成准备 |