我正在尝试从 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(使用前将#替换为@)