我有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出现此错误
答案 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。
确保将导入下方的代码粘贴到正确的代码块中。 多个标记 错误在您尝试将语句直接插入到类中而不是在构造函数,方法,初始化程序等中出现时出现。