AWS cognito 用户池服务器端流程,具有春季启动功能



我想通过春季启动实现 AWS Cognito 服务器端流程。我不太明白流程应该是什么。我应该使用弹簧oauth吗?

需求是这样的。 作为管理员创建用户并授予这些创建用户从 API 网关使用我的 API 的访问权限(让我们忽略 API 网关部分,并说我们现在只需要来自 cognito 的访问令牌(

以下是我认为如果我将 AWS cognito 与 spring oauth2 一起使用应该发生的情况

用户点击localhost:8000/oauth/token- 使用基本身份验证(用户名和密码( 这将使用用户凭据进行 API 调用。用户收到令牌并根据需要使用它。

  1. 此流程安全吗?我应该使用弹簧oauth吗?
  2. 如何处理respond to auth challenge?用户在调用我的应用程序 API 时是否应该首次传递新密码?
@RestController
public class Oauth {

@PostMapping(path = "/oauth/token")
public AdminInitiateAuthResult token(@RequestHeader("username") String username, @RequestHeader("password") String password) {
AWSCognitoIdentityProvider provider = AWSCognitoIdentityProviderClientBuilder
.standard()
.withRegion(Regions.US_WEST_2)
.withCredentials(new AWSStaticCredentialsProvider()).build();

Map<String, String> authParams = new HashMap<>();
authParams.put("USERNAME", username);
authParams.put("PASSWORD", password);
AdminInitiateAuthRequest adminInitiateAuthRequest = new AdminInitiateAuthRequest()
.withClientId("{client-id}")
.withUserPoolId("{user-pool-id}")
.withAuthFlow(AuthFlowType.ADMIN_USER_PASSWORD_AUTH)
.withAuthParameters(authParams);
AdminInitiateAuthResult authResult = provider.adminInitiateAuth(adminInitiateAuthRequest);
return authResult.getAuthenticationResult().getIdToken();
}
}

业务需求非常简单,需要有一个用户池(在本例中为 cognito(,他们可以获取某种令牌来访问少数 API。我想使用弹簧启动来实现这一点,因为 API 是使用弹簧启动编写的,而且我也使用 AWS API 网关

我应该使用弹簧oauth吗?

不。授权由 API 网关完成。API
客户端在使用 API 之前需要从 Cognito 获取令牌(即在那里对自己进行身份验证(。无需在应用程序(弹簧(端执行任何操作。
详情请点击此处。

如果要使用 Cognito 为 API 客户端实现身份验证,请参阅 Cognito 文档以获取示例和手册。
仅供参考,应用程序负载均衡器可用于处理 API 的所有身份验证流。

最新更新