Nel*_*ios 7 java amazon-cognito aws-sdk
我们一直在编写一些代码来测试我们的端点和身份验证过程。我们使用 Cognito 进行身份验证,我们的端点需要具有隐式授权流程的访问令牌。
阅读 Amazon 的文档后,我们成功地使用以下代码获取了 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();
Run Code Online (Sandbox Code Playgroud)
我们只是不知道如何将 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);
Run Code Online (Sandbox Code Playgroud)
小智 3
我发现这很有效。您不需要 openid 来获取访问令牌!返回的令牌包含响应中的所有信息,例如令牌、过期时间、令牌类型等。
private OAuthJSONAccessTokenResponse getAuthToken() {
try {
OAuthClient client = new OAuthClient(new URLConnectionClient());
OAuthClientRequest request = OAuthClientRequest.tokenLocation(AUTH_TOKEN_ENDPOINT)
.setGrantType(GrantType.CLIENT_CREDENTIALS)
.setClientId(CLIENT_ID)
.setClientSecret(CLIENT_SECRET)
//.setScope(SCOPE)
.buildBodyMessage();
System.out.println(request.getBody());
//token = client.accessToken(request, OAuth.HttpMethod.POST);
//System.out.println(token);
this.init = true;
return client.accessToken(request, OAuth.HttpMethod.POST);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3934 次 |
| 最近记录: |