AWS Cognito授权者不适用于Android的AWS开发工具包

时间:2019-08-28 15:42:25

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

在我的Android项目中,由于使用了Cognito,我使用AWS开发工具包(SDK)注册了用户,并在API Gateway中调用了API。在Cognito用户池中,我创建了一个用户池组。该组的目的是仅允许该组中的用户调用特定的API。

为了使其正常工作,我尝试关注this tutorial(尤其是视频)。因此,我创建了一个Cognito授权者,并将其添加到API Gateway中的方法请求中,然后尝试使用AWS开发工具包从我的应用程序调用API:

@Service(endpoint = "https://abcdefghig.execute-api.eu-central-1.amazonaws.com/staging")
public interface AwsdemoapiClient
{
    @Operation(path = "/test-api", method = "GET")
    Empty testApiGet(); 
}

问题是:无论用户是否通过身份验证以及是否在组中,当我在应用程序中testApiGet()调用401 Unauthorized时,即使我已通过验证,也总是会收到以下错误消息:在我的IAM角色中拥有正确的授权。经过一番研究,看来id令牌丢失了,这可能是我收到该错误的原因。

但是,它不是应该由适用于Android的AWS开发工具包自动管理吗?我该如何解决?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

在标头中发送id令牌实际上解决了问题:

@Service(endpoint = "https://abcdefghig.execute-api.eu-central-1.amazonaws.com/staging")
public interface AwsdemoapiClient
{
    @Operation(path = "/test-api", method = "GET")
    Empty testApiGet(@Parameter(name = "Authorization", location = "header") String idToken);; 
}

您可以通过调用以下函数来获取id令牌:

CognitoUserPool pool = new CognitoUserPool(context, userPoolId, clientId, clientSecret, region);
pool.getCurrentUser().getSessionInBackground(...);