我可以将 AWS 用户池用作 Spring 应用程序中的目录服务吗?

Posted

技术标签:

【中文标题】我可以将 AWS 用户池用作 Spring 应用程序中的目录服务吗?【英文标题】:Can I use AWS User Pools as a directory service from a Spring app? 【发布时间】:2017-02-06 02:05:57 【问题描述】:

是否可以将 AWS Cognito 用户池用作在 EC2 中运行的 Spring Boot 应用程序的身份验证和授权提供程序?

用户池似乎提供了很多注册/登录/电子邮件/忘记密码等管道,我可以在 AngularJS 前端中使用它们。

如果前端完成所有身份验证(在 javascript 中),java (spring) 后端是否可以验证从前端传递给它的令牌,如果可以,如何?

或者,对 Cognito 的调用是否可以/应该来自后端,如果可以,又该如何?我是否需要使用 AWS android 移动 SDK?

(我查看了 Lambda 和 Api 网关,但目前它们不是我所追求的)。

【问题讨论】:

【参考方案1】:

这些选项中的任何一个都应该可以工作,具体取决于您的应用要求。前者的好处是通过网络发送用户凭据的频率低于后者。

如果您想用您的第一个建议来验证令牌,您可以做一些事情中的一个。 Cognito 在用户进行身份验证时会提供一个 id 令牌、一个刷新令牌和一个访问令牌。任何采用访问令牌(即 GetUser)的调用都会对该访问令牌进行验证。或者,您可以调用刷新令牌,这将对刷新令牌进行验证。有关 Cognito 出售的代币的更多信息,请访问 here。令牌刷新是通过 Cognito auth flow 完成的,使用挑战名称 REFRESH_TOKEN 或 REFRESH_TOKEN_AUTH。

如果您选择使用第二个,AWS 确实有多个适用于各种语言的开发工具包,包括 Java。这些都支持 Cognito API,但 Cognito 确实使用 SRP 来登录用户。客户端计算相当复杂,因此您可能不想自己承担。您可以从SDK on Github 中提取我们的计算,或者您可以使用here 描述的管理员无 SRP 流程。

【讨论】:

谢谢,我会做更多的挖掘工作。我只是想确保自己走在正确的道路上。 @Rob 进展如何?您是否在 Spring 服务器中进行了令牌验证?

以上是关于我可以将 AWS 用户池用作 Spring 应用程序中的目录服务吗?的主要内容,如果未能解决你的问题,请参考以下文章

AWS身份池Google登录

用于获取AWS Cognito用户池令牌的OAUTH2服务器?

使用多个用户池的具有 Cognito 授权的 AWS API 网关

从我自己的后端更改 AWS Cognito 用户池令牌到期

使用 Amplify 将现有 AWS Cognito 用户池集成到 iOS 项目中

我们可以在 AWS Cognito 的单个用户池中拥有多个角色吗?