java - 在 Java 中获取 Amazon Cognito 访问令牌
问题描述
我们一直在编写一些代码来测试我们的端点和身份验证过程。我们使用 Cognito 进行身份验证,我们的端点需要一个具有隐式授权流的访问令牌。
阅读亚马逊的文档,我们设法使用以下代码获得了一个 openid 令牌:
AmazonCognitoIdentity identityClient = new AmazonCognitoIdentityClient(
new BasicAWSCredentials("XXXXXXXXXXXXXXXXXXXXX",
"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")
);
identityClient.setRegion(Region.getRegion(Regions.EU_WEST_1));
GetOpenIdTokenForDeveloperIdentityRequest request =
new GetOpenIdTokenForDeveloperIdentityRequest();
request.setIdentityPoolId("eu-west-1:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
Map<String,String> logins = new HashMap<>();
logins.put("acceptance-tests", "acceptance-tests");
request.setLogins(logins);
GetOpenIdTokenForDeveloperIdentityResult response =
identityClient.getOpenIdTokenForDeveloperIdentity(request);
String identityId = response.getIdentityId();
String token = response.getToken();
我们只是不知道如何用 openid 令牌交换访问令牌来调用我们的端点。
也就是说,我们甚至不确定是否真的需要先获取 openid 令牌才能获取访问令牌。
在我们尝试使用下面的代码获取访问令牌之前,我们得到的令牌没有被我们的端点接受。我们获得的令牌与我们通过 cognito UI 登录时获得的令牌不同。
final String clientId = "XXXXXXXXXXXXXXXXXXXXXXXXX";
final String region = "eu-west-1";
final String username = "USERNAME";
final String password = "PASSWORD";
AWSCognitoIdentityProvider cognitoClient = AWSCognitoIdentityProviderClientBuilder.standard()
.withRegion(region)
.build();
final Map<String, String> authParams = new HashMap<>();
authParams.put("USERNAME", username);
authParams.put("PASSWORD", password);
final InitiateAuthRequest authRequest = new InitiateAuthRequest();
authRequest.withAuthFlow(AuthFlowType.USER_SRP_AUTH)
.withClientId(clientId)
.withAuthParameters(authParams);
InitiateAuthResult result = cognitoClient.initiateAuth(authRequest);
解决方案
推荐阅读
- java - 如何使用 log4j 在单独的文件中写入错误信息
- python - 从katalon记录器导出的Python脚本无法运行并显示错误
- c++ - C++ 类 [ ] 运算符奇怪的输出
- docker - 保险柜未出现在 Consul(ui) 服务列表中
- mysql - 从 docker 中的 mysql 转储恢复数据库后如何进行 db:migrate
- c++ - 模板函数可以有多种返回类型吗?
- angular8 - 在ngFor中以角度8递增或递减#variable.value
- java - 递归和字符串相等函数的问题
- python-3.x - Python:如何检查字典中的键是否是另一个键的子字符串,从而对值求和?
- python - 姜戈。如何在不重复的情况下仅在单个页面上显示某些内容?