1) 【一句话结论】采用基于OAuth2.0+OpenID Connect的中心化身份服务架构,结合RBAC权限模型,通过统一认证门户实现多部门协作的统一身份认证与授权,并支持跨系统SSO,确保安全性与可扩展性。
2) 【原理/概念讲解】老师讲解:
- RBAC(基于角色的访问控制):核心是“角色”作为权限的集合,用户通过分配角色获得权限。比如“项目经理”角色拥有项目审批权限,简化权限管理。类比:公司部门,每个部门有职责(角色),员工加入部门(分配角色)就获得部门权限。
- 中心化身份服务:作为统一认证与授权的“大脑”,负责用户注册、认证(如密码、短信、生物识别),颁发访问令牌(如JWT),管理用户与角色的关系。类比:医院的总挂号系统,所有科室(部门)都通过它管理患者(用户)的就诊权限。
- 跨系统单点登录(SSO):用户登录一次后,可在多个系统(部门应用)间无缝访问,无需重复登录。原理是通过身份服务颁发的令牌(如JWT)在应用间传递身份信息,应用验证令牌后信任身份。类比:银行ATM,用户在ATM机刷卡(登录)后,可在不同网点(系统)取款(访问),无需再输入密码。
3) 【对比与适用场景】
| 特性 | 传统本地认证 | 统一认证(中心化) |
|---|
| 认证方式 | 每个应用独立存储用户密码 | 中心化身份服务统一管理 |
| 权限管理 | 应用各自维护权限,易冲突 | RBAC集中管理,权限一致 |
| SSO支持 | 需单独开发,兼容性差 | 内置SSO,跨系统无缝 |
| 安全性 | 密码泄露风险高 | 令牌加密,安全传输 |
| 适用场景 | 小规模、独立系统 | 多部门协作、跨系统访问 |
4) 【示例】用户登录流程(伪代码/请求示例):
5) 【面试口播版答案】(约80秒)
“面试官您好,针对中铁建多部门协作的统一身份认证与授权需求,我建议采用基于OAuth2.0+OpenID Connect的中心化身份服务架构。核心思路是搭建一个统一的身份认证中心,所有部门的应用都通过它进行用户认证,并基于RBAC模型管理权限。具体来说,系统会为每个用户分配角色(如项目经理、技术员),用户登录一次后,可在工程管理、物资采购等多个系统间无缝访问,实现跨系统单点登录。安全上,采用JWT令牌加密传输,令牌包含用户身份和角色信息,应用通过验证端点确认令牌有效性,确保权限控制精准。这种方案能统一管理多部门用户,避免权限冲突,提升协作效率,同时满足RBAC的权限分级需求。”
6) 【追问清单】
- 问:如何保障跨系统SSO的安全性?比如令牌被窃取的风险?
回答要点:采用JWT加密(如HS256、RS256),令牌包含过期时间(exp),应用验证令牌时检查签名和过期时间,同时结合设备指纹、IP白名单等动态验证。
- 问:多部门应用接入时,如何处理权限冲突或角色差异?
回答要点:中心化身份服务统一管理角色与权限,应用接入时配置角色映射,通过API(如/roles/assign)调整用户角色,确保权限一致性。
- 问:系统扩展性如何?比如未来新增部门或应用时,是否需要大量修改?
回答要点:采用微服务架构,身份服务作为独立服务,应用通过RESTful API接入,新增应用只需注册认证回调,无需修改核心逻辑,支持水平扩展。
- 问:如何处理用户密码安全?比如密码策略、泄露后的处理?
回答要点:采用强密码策略(复杂度、长度),支持多因素认证(MFA,如短信验证码、生物识别),密码泄露时立即锁定账户,并通知用户重置。
7) 【常见坑/雷区】
- 坑1:权限粒度过粗。比如将所有部门用户都分配“管理员”角色,导致权限失控。需避免,应按实际职责分配角色(如“工程部审批员”仅能审批本部门项目)。
- 坑2:令牌未加密或过期时间设置过长。导致令牌被窃取后长期有效,风险高。需设置合理过期时间(如1小时),并加密传输。
- 坑3:跨系统SSO时,应用未正确验证令牌,导致未授权访问。需确保应用通过身份服务验证端点确认令牌有效性,避免中间人攻击。
- 坑4:未考虑多因素认证(MFA),导致安全风险。对于敏感操作(如资金审批),应强制启用MFA。
- 坑5:部门应用接入时,未进行权限测试,导致角色分配错误。需在接入前进行权限模拟测试,确保角色与实际业务匹配。