认证与授权(Authentication and Authorization)是一组经常连用但边界不同的概念:认证确认“你是谁”,授权决定“你能做什么”。
核心问题
登录系统如果混淆认证和授权,就容易出现两类错误:把“登录成功”误当成“有所有权限”,或把复杂业务权限塞进 IdP 导致平台无法表达自己的规则。清晰边界能让 IdP 管认证,业务系统管授权。
核心机制
| 概念 | 英文 | 问题 | 常见输入 | 常见输出 |
|---|---|---|---|---|
| 认证 | Authentication / AuthN | 你真的是这个主体吗 | 密码、MFA、证书、OIDC 登录结果 | 主体 ID,例如 sub |
| 授权 | Authorization / AuthZ | 这个主体能执行该动作吗 | 主体、资源、动作、上下文、策略 | allow / deny |
平台后台中的流程通常是:
认证:验证 ID Token -> 得到 subject
准入:subject 是否允许进入平台
授权:subject 对 resource/action 是否有权限
审计:记录谁在何时做了什么这里第一步可以交给 OIDC IdP,后两步通常是平台业务逻辑。因为“能否删除设备”“能否审批用户”“能否查看某租户数据”依赖平台的数据模型。
工程用途
- 设计登录和权限边界。
- 审计安全事件时区分登录失败、准入失败和权限拒绝。
- 为管理后台设计 RBAC、审批流和租户隔离。
- 将企业 SSO 与本地业务权限解耦。
边界与常见坑
- 认证成功不代表授权通过:登录用户可能没有任何后台权限。
- 授权失败不一定是登录问题:可能是角色、租户、资源状态或审批状态不满足。
- IdP group claim 不等于业务角色:可以映射,但映射规则必须显式、可审计。
- 安全日志要分层:IdP 记录登录方式,平台记录资源访问和权限判定。