python - 在 python boto3 中使用 AWS cognito Identity 和 openID salesforce
问题描述
我正在为一个应用程序做一个 POC,它将使用来自 Salesforce 的 SSO,使用 OpenID 并将 id_token 传递给 cognito 用户身份以获取 s3 的临时凭证。我已经在 AWS/Salesforce 上设置了所有角色、服务和应用程序。当我为我的身份启用未经授权的访问时,我可以访问 s3。但是,每当我尝试通过 id_token 进行身份验证访问时,它都会向我抛出这个错误:
botocore.errorfactory.NotAuthorizedException:调用GetId操作时发生错误(NotAuthorizedException):登录令牌无效。发行者与 providerName 不匹配
我正在使用 python Boto3。这是我当前的代码:
import boto3
id_token='aaaaaa.bbbbbbbb.cccccccc' #Got from the url salesforce sends after successful authentication
client = boto3.client('cognito-identity', 'us-east-2')
resp = client.get_id(AccountId='123456789123', IdentityPoolId='us-east-2:xxxxxxx-yyyy-zzz-hhhhh-jj888hhhh',
Logins={
'provider_url': id_token
}
)
任何帮助将不胜感激。
解决方案
显然,问题出在provider_url,正如错误提示的那样。我只是简单地将 login.salesforce.com 改为我必须将其更改为 id_token 作为发行人 ID 返回的内容。我必须在 IAM 和代码中的 AWS 访问提供商中更改它。
推荐阅读
- c# - 如何在 MongoDb 中同时更新文档
- mysql - 将重复项的总和作为 IDS 数组获取
- javascript - React Joyride - 结束游览会导致下一步
- python-3.x - 如何编写 python 脚本来发送电子邮件通知
- typescript - 如何对打字稿中的方法重载进行严格检查?
- configuration - sbatch:错误:批处理作业提交失败:请求的节点配置不可用
- c++ - std::lower_bound 和 std::upper_bound 有什么区别?
- redirect - 如何从入口文件中的指定路径重定向到服务的根路径
- c# - 如何在 32 位应用程序中模拟 64 位指针
- django - Django 使用 CSRF 令牌向 views.py 发送 POST 请求,然后重定向页面