在本文中,我们将展示如何使用Spring Security 5.0中引入的OAuth 2.0客户端库 ,在Spring Boot应用程序中为身份验证用户使用Amazon Cognito服务。
什么是AWS Cognito?
Amazon Cognito是由AWS提供的服务,除了提供对访问AWS服务的授予凭证的支持外,AWS还提供用户管理服务(例如注册和登录)。 除了与Facebook,Google,SAML,OpenId等身份提供者集成之外,它还拥有自己的身份提供者
对于Web应用程序开发人员有什么好处?
Web应用程序开发人员(服务器端/单页应用程序)甚至移动应用程序开发人员都可以将用户注册和身份验证的负载卸载到Amazon Cognito,并专注于实现业务需求。
Cognito支持多因素身份验证(MFA),电子邮件和电话号码验证,密码强度管理等功能。 它还支持与其他身份提供商(例如Facebook,Google和自定义SAML集成)的身份验证,其中cognito充当与它们集成的适配器。
简而言之,开发人员可以专注于业务功能,并让AWS处理用户注册和身份验证。
设置Amazon Cognito
Cognito包含两个主要组件:
- 用户池–用于用户和身份管理,管理应用程序客户端详细信息(即将使用Cognito进行身份验证的客户端)
- 身份池–用于授予AWS凭证来访问AWS服务
让我们配置用户池,并创建一个可用于与cognito连接的应用程序客户端。
创建用户池
创建应用客户端
设置应用客户端
设置用户池域名
创建测试用户
这些是设置Cognito用户池和应用程序客户端要遵循的几个步骤。
配置Spring Boot应用程序
我们将利用Spring Security 5中包含的OAuth客户端库及其与Spring Boot的集成 。
更新pom.xml以添加OAuth客户端依赖项
将以下依赖项添加到
,以便能够获取OAuth客户端库 pom.xml
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>
添加与OAuth客户端相关的属性
我们需要定义一些与注册OAuth提供程序和设置OAuth提供程序有关的属性。 需要添加以下属性:
app.url=http://localhost:9999
cognito.rooturl=https://test-userpool.auth.eu-west-1.amazoncognito.com
spring.security.oauth2.client.registration.cognito.provider=cognito
spring.security.oauth2.client.registration.cognito.client-id=<client-id>
spring.security.oauth2.client.registration.cognito.client-secret=<client-secret>
spring.security.oauth2.client.registration.cognito.client-name=test-client
spring.security.oauth2.client.registration.cognito.authorization-grant-type=authorization_code
spring.security.oauth2.client.registration.cognito.scope=email,openid
spring.security.oauth2.client.registration.cognito.redirect-uri-template=${app.url}/login/oauth2/code/cognitospring.security.oauth2.client.provider.cognito.authorizationUri=${cognito.rooturl}/oauth2/authorize
spring.security.oauth2.client.provider.cognito.tokenUri=${cognito.rooturl}/oauth2/token
spring.security.oauth2.client.provider.cognito.jwkSetUri=https://cognito-idp.eu-west-1.amazonaws.com/eu-west-1_Mi1q5QPXa/.well-known/jwks.json
spring.security.oauth2.client.provider.cognito.user-info-uri=${cognito.rooturl}/oauth2/userInfo
spring.security.oauth2.client.provider.cognito.userNameAttribute=username
JWK URI是根据此处给出的准则构建的。
创建一个HTML页面以显示经过身份验证的用户详细信息
我们添加了一个
来显示使用Thymeleaf-Spring安全方言登录的用户详细信息,如下所示: index.html
<div class="container"><div class="row"><div class="col">Authenticated successfully as [[${#authentication.name}]]<br/>Principal: [[${#authentication.principal}]]<div><a th:href="@{/logout}" class="btn btn-primary">Logout</a></div></div></div>
</div>
测试集成
只需运行主类,该应用程序将开始在http:// localhost:9999 /上运行 。 导航到该URL时,您将重定向到Cognito进行身份验证,一旦成功通过身份验证,您将被带到类似于以下内容的应用程序页面:
该应用程序的完整代码可以在此处找到。 在后续文章中,我们将研究如何定制Principal对象,利用用户信息端点,通过Spring安全性进行角色管理,以及单一页面应用程序如何利用Cognito。
翻译自: https://www.javacodegeeks.com/2019/04/integrate-spring-boot-application-cognito.html