当相同的请求与 Postman 一起工作时,如何让 AssumeRolewithSAML 与 CLI 一起工作

How do I get AssumeRolewithSAML to work with CLI when same request works with Postman

我一直在尝试使用 SAML 从基于云的 SAML 提供商到托管在 AWS S3 存储桶上的应用程序进行身份联合。 SAML IdP 将 SAMLResponse 发布到配置的 ACS(网络应用程序中的 API 网关端点)。当我将此 SAMLResponse 与 Postman 一起使用到 AssumeRoleWithSAML 以获取 STS 令牌时,它在正确的响应 200 下工作正常。但是使用 CLI(AWS 命令​​行界面)时相同的 SAMLResponse 无法正常工作,出现以下错误。 我尝试使用 AWS CLI 版本 1.x 以及最新版本 2.x,响应相同。

命令

aws sts assume-role-with-saml --role-arn arn:aws:iam::123456789:role/xxxxx --principal-arn arn:aws:iam::123456789:saml-provider/xxxx-saml-provider --saml-断言文件://samlresponse.log

错误:

调用 AssumeRoleWithSAML 操作时发生错误 (InvalidIdentityToken):无效的 base64 SAMLResponse(服务:AWSOpenIdDiscoveryService;状态代码:400;错误代码:AuthSamlInvalidSamlResponseException;

找不到任何有用的帮助来了解问题所在,并且 CLI 没有给出任何有意义的错误,例如“令牌已过期”等

以下是使用 Postman 的示例 POST 请求,效果很好

https://sts.amazonaws.com/?Version=2011-06-15&Action=AssumeRoleWithSAML&RoleArn=arn:aws:iam::123456789:role/xxxx-saml&PrincipalArn=arn:aws:iam::123456789:saml-provider/xxxx-saml-provider&SAMLAssertion=PD94bWwgdmVyc2lv===

已解决。使用的 SAMLResponse 是 URL 编码的,对于 --assume-role-with-saml,base64 值不兼容。使用 decodeURI 函数解码响应后,它会按预期工作。