【发布时间】:2017-03-07 11:47:51
【问题描述】:
我按照链接中描述的步骤:http://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-integrating-user-pools-with-identity-pools.html 将我的用户池与 cognito 身份集成。但是每次我尝试使用身份验证提供程序访问亚马逊 S3 时,都会收到以下错误:
E/CognitoCachingCredentialsProvider:获取凭据失败 com.amazonaws.services.cognitoidentity.model.NotAuthorizedException: 登录名不匹配。请为此提供至少一个有效的登录信息 身份或身份池。 (服务:AmazonCognitoIdentity;状态 代码:400;错误代码:NotAuthorizedException;请求编号: ff4da8ad-9a96-11e6-9c64-67a5c841c727) 在 com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:712) 在 com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:388) 在 com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:199) 在 com.amazonaws.services.cognitoidentity.AmazonCognitoIdentityClient.invoke(AmazonCognitoIdentityClient.java:558) 在 com.amazonaws.services.cognitoidentity.AmazonCognitoIdentityClient.getId(AmazonCognitoIdentityClient.java:444) 在 com.amazonaws.auth.AWSAbstractCognitoIdentityProvider.getIdentityId(AWSAbstractCognitoIdentityProvider.java:172) 在 com.amazonaws.auth.AWSEnhancedCognitoIdentityProvider.refresh(AWSEnhancedCognitoIdentityProvider.java:76) 在 com.amazonaws.auth.CognitoCredentialsProvider.startSession(CognitoCredentialsProvider.java:561) 在 com.amazonaws.auth.CognitoCredentialsProvider.getCredentials(CognitoCredentialsProvider.java:371) 在 com.amazonaws.auth.CognitoCachingCredentialsProvider.getCredentials(CognitoCachingCredentialsProvider.java:441) 在 com.amazonaws.auth.CognitoCachingCredentialsProvider.getCredentials(CognitoCachingCredentialsProvider.java:76) 在 com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:4369) 在 com.amazonaws.services.s3.AmazonS3Client.putObject(AmazonS3Client.java:1704) 在 com.amazonaws.mobileconnectors.s3.transferutility.UploadTask.uploadSinglePartAndWaitForCompletion(UploadTask.java:203) 在 com.amazonaws.mobileconnectors.s3.transferutility.UploadTask.call(UploadTask.java:85) 在 com.amazonaws.mobileconnectors.s3.transferutility.UploadTask.call(UploadTask.java:44) 在 java.util.concurrent.FutureTask.run(FutureTask.java:234) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 在 java.lang.Thread.run(Thread.java:864)。
代码如下:
public static TransferUtility getTransferUtility(Context context) {
if (sTransferUtility == null) {
sTransferUtility = new TransferUtility(getS3Client(context.getApplicationContext()),
context.getApplicationContext());
}
return sTransferUtility;
}
public static AmazonS3Client getS3Client(Context context) {
if (sS3Client == null) {
sS3Client = new AmazonS3Client(getCredProvider(context.getApplicationContext()));
}
return sS3Client;
}
private static CognitoCachingCredentialsProvider getCredProvider(Context context) {
if (sCredProvider == null) {
sCredProvider = new CognitoCachingCredentialsProvider(
context.getApplicationContext(),
Constants.COGNITO_POOL_ID,
Regions.EU_WEST_1);
Map<String, String> logins = new HashMap<>();
logins.put("cognito-idp.eu-west-1.amazonaws.com/eu-west-1_xxxxxxxxx", idToken);
sCredProvider.setLogins(logins);
}
return sCredProvider;
}
我是如何获得令牌的
AuthenticationHandler authenticationHandler = new AuthenticationHandler() {
@Override
public void onSuccess(CognitoUserSession cognitoUserSession, CognitoDevice device) {
Log.e(TAG, "***Auth Success***");
idToken = cognitoUserSession.getIdToken().getJWTToken();
AppHelper.setCurrSession(cognitoUserSession);
AppHelper.newDevice(device);
closeWaitDialog();
launchUser();
}
transferutility 是 com.amazonaws.mobileconnectors.s3.transferutility 包的一部分。
感谢您的帮助。 费里尼
【问题讨论】:
-
这不是免费的代码调试平台。
-
对不起,我不是在寻找调试。我按照亚马逊网站上描述的步骤将用户池集成到认知身份。但是,我总是无法获得证书。如果有人能告诉我为什么它会很棒!
-
问题解决了!