我是否缺少设置我的 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"。这个命名错误的变量仍然通过获取令牌,但令牌格式不正确。
我正在尝试在应用程序中制作一个按钮,该按钮会自动将用户登录到浏览器中的 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"。这个命名错误的变量仍然通过获取令牌,但令牌格式不正确。