AWS-临时授权方式GetFederationToken
特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过。如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/mao2080/
1、问题描述
最近在做AWS-KVS方面的研究,需要给设备和APP颁布临时令牌。AWS操作说明给的例子不够详细重新网络上寻找资料解决。
2、POM文件
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>sts</artifactId>
<version>2.16.29</version>
</dependency>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>auth</artifactId>
<version>2.16.29</version>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-kinesisvideo</artifactId>
<version>1.11.700</version>
<scope>compile</scope>
</dependency>
3、核心代码
package com.demo.amazon.sts.service;
import software.amazon.awssdk.auth.credentials.AwsCredentials;
import software.amazon.awssdk.auth.credentials.AwsCredentialsProvider;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sts.StsClient;
import software.amazon.awssdk.services.sts.model.Credentials;
import software.amazon.awssdk.services.sts.model.GetFederationTokenRequest;
public class GetFederationTokenTest {
private final static String REGION_NAME = "ap-northeast-2";
private final static String AK = "YOUR_ACCESS_KEY_ID";
private final static String SK = "YOUR_SECRET_ACCESS_KEY";
private final static String USER_NAME = "demo";
public static void main(String[] args) throws Exception {
String channelArn = "arn:aws:kinesisvideo:ap-northeast-2:YOUR_ACCOUNT_ID:channel/amzone-kvs-demo-test/1632657078926";
String policy = "{\"Version\": \"2012-10-17\",\"Statement\": [{\"Sid\": \"VisualEditor0\",\"Effect\": \"Allow\",\"Action\": [\"kinesisvideo:GetSignalingChannelEndpoint\",\"kinesisvideo:ConnectAsMaster\",\"kinesisvideo:ConnectAsViewer\",\"kinesisvideo:SendAlexaOfferToMaster\",\"kinesisvideo:GetIceServerConfig\",\"kinesisvideo:CreateStream\"],\"Resource\": \"${channelArn}\"}]}";
policy = policy.replace("${channelArn}", channelArn);
StsClient stsClient = StsClient.builder()
.credentialsProvider(getAwsCredentialsProvider())
.region(Region.of(REGION_NAME))
.build();
Credentials credentials = getTemporaryCredentials(stsClient, USER_NAME, policy, 3600);
System.out.println("accessKeyId="+credentials.accessKeyId());
System.out.println("secretAccessKey="+credentials.secretAccessKey());
System.out.println("sessionToken="+credentials.sessionToken());
}
/**
* 获取临时Credentials
* @param stsClient stsClient
* @param userName userName
* @param policy policy
* @param durationSeconds durationSeconds
* @return Credentials
* @throws Exception
*/
private static Credentials getTemporaryCredentials(StsClient stsClient, String userName, String policy, int durationSeconds) throws Exception {
GetFederationTokenRequest getFederationTokenRequest = GetFederationTokenRequest.builder()
.name(userName)
.policy(policy)
.durationSeconds(durationSeconds)
.build();
try {
return stsClient.getFederationToken(getFederationTokenRequest).credentials();
} catch (Exception e) {
throw new Exception("Failed to get federation token: ", e);
}
}
public static AwsCredentialsProvider getAwsCredentialsProvider() {
return new AwsCredentialsProvider() {
@Override
public AwsCredentials resolveCredentials() {
return new AwsCredentials() {
@Override
public String accessKeyId() {
return AK;
}
@Override
public String secretAccessKey() {
return SK;
}
};
}
};
}
}
4、运行结果
accessKeyId=ASIA4LPNW5TYVANGARDN secretAccessKey=FylCijk26l/g5uHPpwCJESa/J0hVVyOORxtCPy7T sessionToken=IQoJb3JpZ2luX2VjECEaDmFwLW5vcnRoZWFzdC0yIkcwRQIhAK0ra3Pg3mOnefH/cDlo/hurf8FfNmnTdftAHkDnLXRrAiB4IAF13z9qCaozkZRZ8ZxsjR577vwjIizcmMpdlQ70CSrjAwiL//////////8BEAIaDDg0OTI5MTQzOTM0NSIMUD01WQRT0/WkbCs9KrcDYQhOe+sdagzlDbrWpd5duOyz7j5dq57hv5XmfvLjYgS7KBJHLTEkKnW03DO1MAsV1ZXEfPRAsOrdWOnxeiIanWtPRU3bWVHdQ4Zjh565aXYvJLrxOH2NnbT7zaPfvP4X7r4euUohzY+MGjGT7I2cr3jPXFfcS0njbWz6rNhnnq883qDjWL8z+G7BHFKGhjOiW9+eAe8vbd/aAjiZ4Nh91xlt17lUyI5AV9yGrCntTrUKp17GHaZbP2CVywUET9Y0iduLYXS9Bwr5HFT60RURUK7YZwcmaOT/7WwbuRoLhsuchvl7qRu891VTrCV9e+4y3B/1x1AJ5VpiXPQZ/yzphsk9qLfOyasQ90x/exvkyde9AVDFUBwPf7A9Gxz25eCfAv6BbTwrfzGCKEfNARlXQGVScXYDjpvvaNzCI4DzY3uB+mG0Mb1cHy5at7OEaxsqwlgHHfiiiSKRS/UXstQUC/j6LhxfacB3vXaeOfE4YwdXipwJxirKnjGvsLI30E8PWLLCymTHJrCow/6jbE4+FUBolo9I3lJc+ATlyxsxpn2+R988oCYetZvMi8INDW1JITlS44K2UTCfnMaKBjqZAcMqLFE+3bD8C/Zy0o0joVhkNDN41lu3RgQFMNPNJSnDboc88D6mRXbU7zS2WNdR3KnnuwpI9vEO/ttknFyb3W5dU9LEcfk6hdL3U2DxBx0pKL6bxP2cu5ADK0lkvJQuyhHSy+tR3k7gmw5i3BOiJEPeD1dJ+Q35Or2322iN9KXBqkNQByBKQ/5amZ+ylRRPe1qeP5OOXuuBUg==
5、参考网址
https://codingdict.com/sources/java/com.amazonaws/64702.html
个性签名:1.01的365次方=37.78343433289 >>>1
0.99的365次方= 0.02551796445229 <<<1
每天进步一点点的目标,贵在坚持…

浙公网安备 33010602011771号