2017-02-09 54 views
0

我在集成Cognito和ApiGateway时遇到了问题。 首先我用Cognito签署,没有问题,我得到所有的令牌。 然后我必须打电话给API网关。我正在使用Android自动生成的SDK。 我在这里的例子如下:http://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-generate-sdk-android.html但我总是得到相同的错误。Android上的AWS Api Gateway和Cognito - 错误401

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

你有没有从Cognito身份池,这是不一样的事,作为一个Cognito用户群越来越凭据Android的代码。

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

+0

谢谢。您说得对,我正在为Cognito身份池设置凭据。 其实,我只需要用UserPool标记来设置heather,但我无法找到,因为生成的SDK不是很灵活。 原因是后端存在问题,并且未命中配置。在修复之后,生成的SDK在方法 (@Parameter( name =“Authorization”, location =“header”) 和瞧!中添加此参数。 –