首页 > 解决方案 > 配置 Amplify 以使用现有的 Cognito 令牌

问题描述

我正在开发一个使用 Amplify (JS) Storage 将文件上传到 S3 存储桶的应用程序。它已经配置好并且工作正常,但我需要使用策略来保护它,并且只允许一组能够上传文件的用户(组)。我正在使用后端服务从 Coginito 获取令牌,并将其传递给前端,现在我唯一需要弄清楚的是,如何将该令牌传递给 Amplify。我确实尝试过,federatedSignIn但它需要一个域,除了令牌之外,我真的不需要传递任何东西。

标签: reactjsaws-amplifyamplifyjs

解决方案


Auth 上有一个(现在是私有的)函数似乎可以处理这种情况,_handleAuthResponse.

将成功登录后获得的返回 url 传递给函数,其中包含令牌。

因为它是一个私有函数,它需要这个解决方法来访问 _handleAuthResponse:

urlWithToken = 'https://localhost:4200/login#access_token=[ACCESS_TOKEN]&id_token=[ID_TOKEN]&state=[STATE]&token_type=Bearer&expires_in=3600'

(Auth as any)._handleAuthResponse(urlWithToken)

我不确定有多少参数是必需的,因为这些是我们从联合登录返回的登录重定向中包含的参数。

在我们的应用程序中,我们使用 Hub 侦听器来获取用户详细信息:

Hub.listen('auth', ({ payload: { event, data } }) => {
    console.log('HUB:', event);
    console.log('HUBData:', data);
    if (event == 'signIn' && data != undefined) {
      //data is a user object
    }
  });

这是用于拼凑的参考: https ://github.com/aws-amplify/amplify-js/issues/4955


推荐阅读