如何从 Amplify 获取与 API 网关和 cognito 配合使用的访问令牌?

2024-02-22

我正在尝试从 Amplify(使用 Vue)获取正确的令牌,以使用 Cognito 登录 API 网关。

到目前为止我尝试过这些:

  Auth.currentSession().then(data => {
    console.log('idToken: %s',data.idToken.jwtToken)
  }).catch(err => console.log(err));

  Auth.currentSession().then(data => {
    console.log('accessToken: ',data.accessToken)
  }).catch(err => console.log(err));

  Auth.currentSession().then(data => {
    console.log('jwtToken: ',data.accessToken.jwtToken)
  }).catch(err => console.log(err));

但如果我将它们复制给邮递员,它们都不起作用。

如果我获取从测试登录用户界面返回的 access_token,那么唯一有效的方法是。

--edit--

看起来 Amplify 提供的令牌范围错误:

  "scope": "aws.cognito.signin.user.admin"

Hostet UI 中的令牌如下所示:

  "scope": "phone openid profile email",

提示:可以解码https://jwt.io/ https://jwt.io/

有一个关于 Amplify 的讨论:

https://github.com/aws-amplify/aws-sdk-android/issues/684 https://github.com/aws-amplify/aws-sdk-android/issues/684

但目前我还没有解决办法


经过一番调查,似乎没有解决方案可以在 Amplify 中设置不同的范围。

现在我做了以下事情:

在 API Gateway 中设置此范围:

aws.cognito.signin.user.admin

(不确定这是否是安全问题!?)

现在我可以访问 lambda 了。由于我需要用户的电子邮件地址,因此我在 Python 中使用用户名(由访问令牌传递)发出 cognito 请求。

client = boto3.client('cognito-idp')
user_details = client.admin_get_user(
    Username=user_name,
    UserPoolId=user_pool_id
)

logger.warning("user_details: {}".format(user_details))

无法使用 id_token,因为它不包含传递 API 网关所需的范围信息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 Amplify 获取与 API 网关和 cognito 配合使用的访问令牌? 的相关文章

随机推荐