如何在 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 进行未经身份验证的调用?

使用 AWS cognito 进行匿名身份验证

AWS Cognito 身份空

具有 Cognito 联合身份的 AWS AppSync IAM 授权

在静态网页上保护 AWS Cognito 用户池和客户端 ID

在 Graphql 操场上使用 AWS Cognito 用户池对 AppSync 突变进行身份验证