4

我正在构建基于微服务架构的 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。我对吗?

4

1 回答 1

1

首先,AWS Cognito 包含两项服务。

  • AWS Cognito UserPools(即身份提供者)- 这是您可以创建用户并使用其他策略管理其凭证的服务。它还可以提供登录屏幕,我们可以在其中自定义徽标和外观,使其成为即插即用的登录服务。然后还可以配置身份验证流程(例如,将服务设为 OpenIDConnect 身份验证提供程序,以便在用户登录后返回 JWT 令牌)。也可以连接社交身份(Facebook、Google 等)和 SAML。
  • AWS Cognito Federated Identities(授予用户访问 AWS 服务的身份联合)- 该服务能够接受 AWS Cognito UserPool 令牌或来自其他提供商的直接访问,我们可以联合对 AWS 资源的访问。例如,AWS Cognito Federated Identities 可以授予用户临时访问权限,该用户已通过其他提供商(例如 AWS Cognito UserPools)的身份验证,以将文件上传到 S3。

有关更多详细信息,请参阅文章AWS Cognito 用户池和联合身份之间的区别?.

所以回到你的问题,

  1. 到目前为止,我正在考虑将 Cognito 作为我的身份验证服务的替代品?

您可以使用 AWS Cognito UserPools 身份验证服务来颁发 JWT 令牌并在您的其他服务端点的 AWS Lambda 自定义授权器中验证令牌。这也是您可以进行授权的地方。

  1. 我的静态网站将为用户登录/注册实现 JavaScript SDK。我对吗?

不必要。如果您使用 AWS Cognito UserPools 托管 UI,您将获得登录、注册、密码更改、确认页面,默认情况下,还会自动重定向联合身份(基于配置),例如 Facebook、Google 或企业凭证,例如 Office365。尽管自定义有限,但您应该能够添加自己的徽标并更改这些屏幕的背景颜色。如果您打算自行实施,那么您可以使用 AWS 开发工具包来实施这些屏幕。

有关无服务器架构的更多详细信息,请参阅使用 AWS 的全栈无服务器 Web 应用程序

于 2018-03-27T04:57:32.887 回答