亚马逊WS上托管的微服务应用程序中的用户身份验证

时间:2017-03-27 08:36:46

标签: amazon-web-services authentication architecture microservices aws-cognito

我正在构建基于微服务架构的Web应用程序。此刻我正在考虑几种用户身份验证流程。我预测以下示例用户角色:

  • admin - 能够创建内容,上传文件等(管理员帐户只能由其他管理员创建)
  • 未经授权的用户 - 可以查看内容
  • 授权用户 - 可以发表评论内容

到目前为止,我是如何考虑身份验证流程的:

  • 身份验证服务 - 可以访问具有用户凭据和权限的数据库
  • api gateway - 检索用户的请求,检查用户是否已登录(即使用auth服务验证OAuth2访问令牌),并根据用户请求将流量传输到其他服务(附加带有一些基本用户信息的JWT令牌)
  • 另一项服务 - 仅接受来自api网关的请求,并信任来自JWT令牌的用户数据(无需连接auth服务即可获取有关用户的信息)。

在AWS基础架构上部署一些东西后,我的思维方式发生了一些变化。据我了解AWS产品(Lambda - 无服务器应用程序和API网关),我应该按如下方式实现身份验证流程:

  • 身份验证服务 - 从用户获取请求,从dynamoDB检索数据并为用户cookie提供私钥签名的JWT
  • 任何其他服务 - 使用JWT令牌检索请求,使用公钥验证签名,并执行某些操作。

现在问题来了:

AWS Cognito如何适合这里?这对我有用吗?据我了解,Cognito简化了通过第三方(Facebook,Twitter等)验证用户的流程。 AWS Cognito是否提供与我的应用程序分离的登录页面,或者只是后台/ webservices的发布?

到目前为止,我正在考虑将Cognito替换为我的authentication service - 我的任何服务,都应该阻止来自amazon的SDK提供的Cognito身份验证流程,而我的静态网站会实现用于用户登录/注册的JavaScript SDK 。我是对的吗?

1 个答案:

答案 0 :(得分:0)

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

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

有关详细信息,请参阅文章The Difference Between AWS Cognito UserPools and Federated Identities?

回到你的问题,

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

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

  
      
  1. 我的静态网站会为用户实施JavaScript SDK   登录/注册。我是对的吗?
  2.   

不一定。如果您使用AWS Cognito UserPools托管UI,则默认情况下将获得登录,注册,密码更改,确认页面以及联合身份(基于配置)的自动重定向,例如Facebook,Google或Office 365等企业凭据。虽然自定义有限,但您应该能够添加自己的徽标并更改这些屏幕的背景颜色。如果您计划通过自己实现此目的,那么您可以使用AWS开发工具包来实现这些屏幕。

有关无服务器架构的更多详细信息,请参阅Full Stack Serverless Web Apps with AWS