我是否缺少设置我的 AWS 账户以成功执行 GetFederationToken 的步骤?

Am i missing steps in setting up my AWS account to sucessfully perform GetFederatedToken?

我正在尝试在应用程序中制作一个按钮,该按钮会自动将用户登录到浏览器中的 AWS 控制台。 当用户单击按钮时,它应该准备一个令牌并组成一个 URL,然后在一个新的 window 中打开那个 URL,这会导致登录发生,从而导致用户进入AWS 控制台。

我正在使用 AWS Javascript API 来完成此操作 (https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/top-level-namespace.html)。

具体来说,我正在执行此处描述的 "GetFederationToken" 步骤: https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_enable-console-custom-url.html

并在此处使用示例代码: https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/STS.html#getFederationToken-property

我在第一步中使用 IAM 用户请求令牌。此用户具有 AdministratorAccess 策略,我可以成功调用 getFederatedToken API 调用。我取回了预期的令牌、秘密和访问密钥。

然后我写 URL:

AWS.config.update({
                accessKeyId: "ACCESS",
                secretAccessKey: "SECRET",
                "region": "us-east-1",
                accountID: "123456789"
            });
var sts = new AWS.STS();
var params = {
                    Name: 'user',   
                    DurationSeconds: 900,            
                    Policy: "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Sid\":\"Stmt1\",\"Effect\":\"Allow\",\"Action\":\"s3:ListAllMyBuckets\",\"Resource\":\"*\"}]}"
                };

var console_url = "https://console.aws.amazon.com/"
var signin_url = "https://signin.aws.amazon.com/federation"
var issuer_url = "https://myCompanyURL.com/"

sts.getFederationToken(params, function(err, data) {            
                if (err) {
                    console.log(err, err.stack); // an error occurred
                }
                else{
                    //Construct the session token
                    var sessionTokenJSON = {
                        sessionID : data.Credentials.AccessKeyId,
                        sessionKey : data.Credentials.SecretAccessKey,
                        sessionToken : data.Credentials.SessionToken
                    };

                    var sessionTokenString = JSON.stringify(sessionTokenJSON);
                    var encodedSessionToken = encodeURIComponent(sessionTokenString);

                    console.log(sessionTokenString);

                    //Get the SignIn Token
                    var signInURL = signin_url+"?Action=getSigninToken&Session="+encodedSessionToken;

                    var xmlHttp = new XMLHttpRequest();
                    xmlHttp.open( "GET", signInURL, false );
                    xmlHttp.send( null );
                    var result =  xmlHttp.responseText;
                    result = JSON.parse(result);

                    //Get the login URL
                    var encodedIssuer = encodeURIComponent(issuer_url);
                    var encodedDestination = encodeURIComponent(console_url);

                    var loginURL = signin_url+"?Action=login&Destination="+encodedDestination+"&SigninToken="+result.SigninToken;
                    console.log(loginURL)

                    //Open the URl
                    window.open(loginURL);
                }   
            });

我已验证我使用的访问权限和密码以及帐户 ID 有效并且与我要使用的 IAM 用户对应。

我已经尝试使用上面的 console_url 和我的 AWS 账户管理部分中显示的那个,上面的 URL 产生了下面详述的错误,从我的 AWS 账户登录 IAM 控制台管理科returns一个404.

issuer_url 和 console_url 格式正确 https URLs。它们是 URI 编码的,如说明中所述,我的结果 URL 在结构上与上面链接的站点中的示例相同。

当我调用 window.open() 调用时,新的 window 打开,但我总是得到这个响应页面:

Amazon Web Services Sign In
Some of your credentials are missing. Please contact your administrator.

我不知道我可能错过了哪些步骤或我可能忽略了哪些先决条件,我们将不胜感激任何建议。

"sessionID" 参数应该是 "sessionId"。这个命名错误的变量仍然通过获取令牌,但令牌格式不正确。