在我的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开发工具包自动管理吗?我该如何解决?
感谢您的帮助。
答案 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(...);