AWS Cognito 授权方未与 Android 的 AWS SDK 一起使用
AWS Cognito authorizer not working with AWS SDK for Android
在我的 Android 项目中,由于 Cognito,我使用 AWS SDK 注册用户并在 API 网关中调用 APIs。在我的 Cognito 用户池中,我创建了一个用户池组。该组的目的是只允许该组中的用户调用特定的 API.
为了让它发挥作用,我尝试关注this tutorial(尤其是视频)。因此,我创建了一个 Cognito 授权方,将其添加到 API 网关中的方法请求中,并尝试使用 AWS SDK 从我的应用程序调用 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 SDK 自动管理吗?我该如何解决?
感谢您的帮助。
在header中发送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(...);
在我的 Android 项目中,由于 Cognito,我使用 AWS SDK 注册用户并在 API 网关中调用 APIs。在我的 Cognito 用户池中,我创建了一个用户池组。该组的目的是只允许该组中的用户调用特定的 API.
为了让它发挥作用,我尝试关注this tutorial(尤其是视频)。因此,我创建了一个 Cognito 授权方,将其添加到 API 网关中的方法请求中,并尝试使用 AWS SDK 从我的应用程序调用 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 SDK 自动管理吗?我该如何解决?
感谢您的帮助。
在header中发送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(...);