2017-02-09 55 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」) 和瞧!中添加此參數。 –