微服务中的身份验证和授权
· 阅读需 12 分钟
需求
- 设计一个从简单开始但可以随着业务扩展的身份验证解决方案
- 考虑安全性和用户体验
- 讨论该领域的未来趋势
大局观:身份验证(AuthN)、授权(AuthZ)和身份管理
首先,回归基础
- 身份验证:确定你是谁
- 授权:确定你可以做什么
在开始时……让我们有一个简单的服务……
- 分层架构
客户端存储一个cookie或token作为登录状态的证明。(代客钥匙模式)
- 服务器持久化相应的会话
token通常采用JWT格式,由从安全位置(环境变量、AWS KMS、HarshiCorp Vault等)获取的密钥签名
- 流行的Web框架通常提供开箱即用的身份验证解决方案
然后,随着业务的增长,我们用AKF规模立方体来扩展系统:
- X轴:水平克隆
- Y轴:功能分解
- Z轴:分片
加上康威定律:组织设计的系统反映其沟通结构。我们通常将架构演变为微服务(参见为什么选择微服务?了解更多)
- 顺便说一句,“微服务与单体”和“多仓库与单仓库”是不同的概念。
- 对于企业,有员工身份验证和客户身份验证。我们更关注客户身份验证。
在微服务世界中,让我们抽取身份验证和授权服务的功能切片,并有一个身份和访问管理(IAM)团队在进行相关工作。
- 身份感知代理 是一个反向代理,允许公共端点或检查受保护端点的凭证。如果凭证未提供但被要求,则将用户重定向到身份提供者。例如:k8s ingress controller、nginx、envoy、Pomerium、ory.sh/oathkeeper等。
- 身份提供者和管理者 是一个或几个通过某些工作流(如登录、忘记密码等)管理用户身份的服务。例如:ory.sh/kratos、keycloak
- OAuth2和OpenID Connect提供者 使第三方开发者能够与您的服务集成。
- 授权 服务控制谁可以做什么。