我正在构建基于微服务架构的 Web 应用程序。目前,我正在考虑几种用户身份验证流程。我预测以下示例用户角色:
- 管理员 - 能够创建内容、上传文件等(管理员帐户只能由另一个管理员创建)
- 未经授权的用户 - 可以查看内容
- 授权用户 - 可以评论内容
到目前为止,我是如何考虑身份验证流程的:
- 身份验证服务 - 可以使用用户凭据和权限访问数据库
- api gateway - 检索用户的请求,检查用户是否已登录(即使用身份验证服务验证 OAuth2 访问令牌)并根据用户请求将流量转移到其他服务(附加 JWT 令牌和一些基本用户信息)
- 另一个服务 - 只接受来自 api 网关的请求,并信任来自 JWT 令牌的用户数据(不需要连接 auth 服务来获取有关用户的信息)。
在 AWS 基础设施上部署了一些东西之后,我的思维方式发生了一些变化。据我了解 AWS 产品(Lambda - 无服务器应用程序和 API 网关),我应该按如下方式实现身份验证流程:
- 身份验证服务 - 获取用户请求,从 dynamoDB 检索数据,并为用户 cookie 提供由私钥签名的 JWT
- 任何其他服务 - 使用 JWT 令牌检索请求,使用公钥验证签名,并执行一些操作。
现在问题来了:
deos AWS Cognito 如何适合这里?对我有用吗?据我了解,Cognito 简化了通过第三方(facebook、twitter 等)验证用户的流程。AWS Cognito 是否提供与我的应用程序分开的登录页面,或者它只是后台/网络服务实施?
到目前为止,我正在考虑将 Cognito 作为我的替代品authentication service
——我的任何服务都应该执行由亚马逊 SDK 提供的 Cognito 身份验证流程,并且我的静态网站将为用户登录/注册实现 JavaScript SDK。我对吗?