首页 > 解决方案 > 在 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 不匹配

我正在关注这里的教程https://aws.amazon.com/blogs/security/building-an-app-using-amazon-cognito-and-an-openid-connect-identity-provider/

我正在使用 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
                     }
                     )

任何帮助将不胜感激。

标签: pythonamazon-web-servicessalesforceboto3amazon-cognito

解决方案


显然,问题出在provider_url,正如错误提示的那样。我只是简单地将 login.salesforce.com 改为我必须将其更改为 id_token 作为发行人 ID 返回的内容。我必须在 IAM 和代码中的 AWS 访问提供商中更改它。


推荐阅读