Api Android 上的 AWS Api 网关和 Cognito - 错误 401

AWS Api Gateway and Cognito on Android - Error 401

我在将 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)

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

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