Android上的AWS Api Gateway和Cognito - 错误401

时间:2017-02-09 19:17:13

标签: android amazon-web-services aws-api-gateway aws-cognito

我在将Cognito与ApiGateway集成时出现问题。 首先我使用Cognito登录,而不是那里的问题,我得到了所有的令牌。 然后我必须打电话给API网关。我使用自动生成的Android版SDK。 我跟随这里的示例:http://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-generate-sdk-android.html但我总是得到同样的错误。

CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(
                    context,
                    CognitoConstants.IDENTITY_POOL_ID,
                    CognitoConstants.REGION);

String token = cognitoUserSession.getIdToken().getJWTToken();

Map<String, String> logins = new HashMap<>();
            logins.put(CognitoConstants.LOGIN_MAP_KEY, token);
            credentialsProvider.setLogins(logins);

ApiClientFactory factory = new ApiClientFactory()
                    .credentialsProvider(credentialsProvider);

client = factory.build(ExampleAPIClient.class);
client.exampleApi1AccountsGet();

结果是:

ApiClientException com.amazonaws.mobileconnectors.apigateway.ApiClientException: {"message":"Unauthorized"}
(Service: BancarAPIClient; Status Code: 401; Error Code: null; Request ID: 3679cd4b-eefc-11e6-9d00-f99040a8ed67)

1 个答案:

答案 0 :(得分:0)

您拥有的Android代码是从Cognito Identity Pool获取凭据,这与Cognito用户池不同。

我不确定您要使用哪一个,但是如果Android代码是正确的,并且您想通过Twitter / FB /等进行登录。 (即标识池),您需要将API网关方法的AuthorizationType设置为AWS_IAM。看起来API可能设置了Cognito Authorizer,用于用户池功能。