0

在我的 Android 项目中,我使用 AWS SDK 注册用户,这要归功于 Cognito 并在 API Gateway 中调用 API。在我的 Cognito 用户池中,我创建了一个用户池组。该组的目的是只允许该组中的用户调用特定的 API。

为了使其工作,我尝试遵循本教程(尤其是视频)。因此,我创建了一个 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 开发工具包自动管理吗?我该如何解决?

谢谢你的帮助。

4

1 回答 1

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(...);
于 2019-08-29T16:43:04.127 回答