首页 文章

在Amazon WS上托管的微服务应用程序中的用户身份验证

提问于
浏览
4

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

    首先,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? .

    所以回到你的问题,

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

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

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

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

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

相关问题