如何在 AWS Cognito 上使用未经身份验证的用户在 React 上启用 AWS 位置服务地图?
Posted
技术标签:
【中文标题】如何在 AWS Cognito 上使用未经身份验证的用户在 React 上启用 AWS 位置服务地图?【英文标题】:How can I enable AWS Location Services map on React with unauthenticated user on AWS Cognito? 【发布时间】:2021-10-04 21:31:57 【问题描述】:我目前正在开发一个反应应用程序,以使用 AWS 位置服务集成地图。我在网上关注了this tutorial。本教程使用 AWS Cognito 进行用户身份验证,但我的应用程序已经有了我们自己的内部身份验证方法。因此,我希望在没有身份验证的情况下实现地图(来自 Cognito)。
我遵循了链接到 here 的相同 youtube 教程代码,但我一直面临身份验证问题。该代码使用 amazon-location-helpers
包中的 createRequestTransformer()
函数,需要凭据,但由于我想允许未经身份验证的访问,因此我正在使用身份池 ID。
这是我在 React 应用程序上遇到的错误,我收到了从 400、403 到 404 的各种身份验证错误。
Unhandled Rejection (InvalidIdentityPoolConfigurationException): Invalid identity pool configuration. Check assigned IAM roles for this pool.
我已经尝试了 *** 帖子 here 中的所有解决方案,但无济于事。尽管我无法访问,但每当我刷新页面时,我的 AWS Cognito 控制台都会添加用户计数,如下图所示。
【问题讨论】:
【参考方案1】:此错误与 Cognito User Assumed IAM 角色有关,该角色没有正确访问您尝试在代码中调用的资源。
即使用户未经身份验证 - 仍假定未经身份验证的角色。转到 Cognito 身份池控制台并记下指定的 IAM 角色。在 IAM 控制台中转到该角色并应用必要的 IAM 策略,以便未经身份验证的 Cognito 用户可以担任该角色。
这里是亚马逊位置的 IAM 相关文档:https://docs.aws.amazon.com/location/latest/developerguide/security_iam_id-based-policy-examples.html
一旦完成
useEffect(() =>
const fetchCredentials = async () =>
setCredentials(await Auth.currentUserCredentials());
;
fetchCredentials();
, []);
具体而言,await Auth.currentUserCredentials()
将为用户获取临时凭证,该用户将根据您在未验证 Cognito 身份池 IAM 角色上应用的 IAM 策略中的规范,获得对 Amazon 位置的正确访问权限。
【讨论】:
以上是关于如何在 AWS Cognito 上使用未经身份验证的用户在 React 上启用 AWS 位置服务地图?的主要内容,如果未能解决你的问题,请参考以下文章
“没有当前用户”:是不是甚至可以通过 Amplify 使用身份验证类型 AMAZON_COGNITO_USER_POOLS 对 AWS AppSync 进行未经身份验证的调用?
具有 Cognito 联合身份的 AWS AppSync IAM 授权