知识卡片
委托身份提供者而非自建认证
内容
一开始只需要支持用户名密码登录,自己在应用里写认证逻辑好像也不复杂;但一旦冒出新需求——员工要用公司 Active Directory 登录、用户想用 GitHub 账号社交登录、要支持单点登录——每加一种认证方式都要在应用里改代码,这种做法根本撑不住持续增长的需求。更合理的架构是把”验证用户身份”这件事整体委托给一个专门的身份提供者(identity provider),应用本身只需要知道”认证结果是什么”,完全不用关心背后具体是用密码验证的还是社交登录验证的。这样一来,新增一种认证方式只需要在身份提供者那边配置,应用侧代码一行都不用改。发散:这是[[数据服务选型的四个维度]]里”专业事情交给专业组件”这条思路在认证领域的具体体现——认证涉及密码存储、加密算法选型这类极易出安全漏洞的细节,把它整体外包给一个专注做这件事、经过大量安全审计的独立服务,比自己在业务应用里反复造轮子风险低得多。
参考来源
《Cloud Native Spring in Action》第11章《Security: Authentication and SPA》