如何使用访问密钥,秘密密钥和会话令牌登录到AWS控制台?

时间:2020-01-28 16:08:35

标签: amazon-web-services amazon-cognito

我有Cognito用户池和身份池,还有一个应用程序,在其中集成了所有这些内容并进行注册和登录,并获得了临时凭据(如访问密钥,秘密密钥和会话令牌)。我想在应用程序中创建一个按钮,以便成功登录后,将出现一个按钮以打开AWS控制台,并且该用户将能够访问AWS服务(如S3)。

我得到了这个link,可以用来创建可以放在按钮后面的URL,但是如何实现这一点,我正在尝试使用Java,但无法正常工作

 GetFederationTokenRequest getFederationTokenRequest = 
  new GetFederationTokenRequest();
getFederationTokenRequest.setDurationSeconds(1800);
getFederationTokenRequestet.getName("UserName");

// A sample policy for accessing Amazon Simple Notification Service (Amazon SNS) in the console.

String policy = "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Action\":\"sns:*\"," +
  "\"Effect\":\"Allow\",\"Resource\":\"*\"}]}";

getFederationTokenRequest.setPolicy(policy);

此行显示多个标记。 SetDurationSeconds,SetName,SetPolicy出​​现此错误

2 个答案:

答案 0 :(得分:1)

您可以通过从https://signin.aws.amazon.com/federation端点检索SigninToken来从临时凭证生成AWS控制台URL。

首先,您需要使用AWS临时凭证创建一个JSON对象:

{
  "sessionId": "<aws access key id>",
  "sessionKey": "<aws secret access key>",
  "sessionToken": "<aws session token>"
}

使用该JSON作为以下URL中“会话”参数的值

https://signin.aws.amazon.com/federation?Action=getSigninToken&Session=<the JSON object>

JSON响应如下:

{
  "SigninToken":"VsPfcblaC....."
}

在以下URL中使用SigninToken值。它将打开控制台:

https://signin.aws.amazon.com/federation?Action=login&Destination=https://console.aws.amazon.com/&SigninToken=<SigninToken>

“目标”值可以是特定的服务URL,例如EC2或S3

我在此处创建了示例实现:https://gist.github.com/janaz/80b1f6054a044ce78cbf5abae7288b50

答案 1 :(得分:0)

首先,确保您具有正确的IAM角色并具有访问AWS资源(S3,控制台等)的权限。请阅读Cognito Developer Guide - IAM Roles中的更多详细信息。

关于您的Java代码,似乎提供的链接中的示例尚未准备好用作“复制和粘贴”。另外,它取决于您需要导入到项目中的AWS SDK for Java

确保将导入下方的代码粘贴到正确的代码块中。 多个标记 错误在您尝试将语句直接插入到类中而不是在构造函数,方法,初始化程序等中出现时出现。