Я пропускаю шаги по настройке моей учетной записи AWS для успешного выполнения GetFederatedToken? - PullRequest
0 голосов
/ 03 октября 2019

Я пытаюсь создать кнопку в приложении, которая автоматически регистрирует пользователя в консоли AWS в браузере. Когда пользователь нажимает кнопку, он должен подготовить токен и составить URL-адрес, а затем открыть этот URL-адрес в новом окне, в результате чего происходит вход в систему, в результате чего пользователь находится в консоли AWS.

I'mс помощью API-интерфейса Javascript AWS для этого (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, и я могу успешно вызвать API-вызов getFederatedToken. Я получаю ожидаемый токен, секретный ключ и ключи доступа.

Затем я составляю 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);
                }   
            });

Я подтвердил, что доступ, секрет и идентификатор учетной записи, которую я использую, действительны и соответствуют пользователю IAM, которого я хочу использовать.

Я попытался использовать как console_url, приведенный выше, так и тот, который показан в моем разделе управления учетными записями AWS. Приведенный выше URL вызывает ошибку, подробно описанную ниже, журнал консоли IAM. из моего раздела управления учетной записью AWS возвращает 404.

isser_url и console_url - это правильно отформатированные URL-адреса https. Они закодированы в URI, как описано в инструкциях, и мой результирующий URL выглядит структурно так же, как в примере на сайте, указанном выше.

Новое окно открывается, когда я вызываю вызов window.open (), но явсегда получайте эту страницу ответа:

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

Я в растерянности из-за шагов, которые я, возможно, пропустил, или предварительных условий, которые я мог пропустить, любые предложения будут с благодарностью.

1 Ответ

1 голос
/ 07 октября 2019

Параметр "sessionID" должен был иметь значение "sessionId". Эта переменная с неправильным именем все еще проходит для получения токена, но затем токен деформируется.

...