将Spring Boot应用程序与Amazon Cognito集成

在本文中,我们将展示如何使用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

创建应用客户端

亚马逊Cognito

设置应用客户端

亚马逊Cognito

设置用户池域名

亚马逊Cognito

创建测试用户

亚马逊Cognito

这些是设置Cognito用户池和应用程序客户端要遵循的几个步骤。

配置Spring Boot应用程序

我们将利用Spring Security 5中包含的OAuth客户端库及其与Spring Boot的集成

更新pom.xml以添加OAuth客户端依赖项

将以下依赖项添加到pom.xml ,以便能够获取OAuth客户端库

<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/cognito

spring.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页面以显示经过身份验证的用户详细信息

我们添加了一个index.html来显示使用Thymeleaf-Spring安全方言登录的用户详细信息,如下所示:

<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进行身份验证,一旦成功通过身份验证,您将被带到类似于以下内容的应用程序页面:

亚马逊Cognito

该应用程序的完整代码可以在此处找到。 在后续文章中,我们将研究如何定制Principal对象,利用用户信息端点,通过Spring安全性进行角色管理,以及单一页面应用程序如何利用Cognito。

翻译自: https://www.javacodegeeks.com/2019/04/integrate-spring-boot-application-cognito.html

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值