我在将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)
答案 0 :(得分:0)
您拥有的Android代码是从Cognito Identity Pool获取凭据,这与Cognito用户池不同。
我不确定您要使用哪一个,但是如果Android代码是正确的,并且您想通过Twitter / FB /等进行登录。 (即标识池),您需要将API网关方法的AuthorizationType
设置为AWS_IAM
。看起来API可能设置了Cognito Authorizer,用于用户池功能。