• 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 每天进步一点点的目标,贵在坚持…
  • 相关阅读:
    vim中如何设置多行注释和删除注释
    ubuntu如何设置普通用户密码
    ubuntu中出现syntax error:Bad for loop variable
    学习进度条
    单元测试练习
    用户体验设计案例分析
    学生成绩录入系统设计与实现
    需求分析
    结对项目——词频统计2
    结对项目—— 词频统计
  • 原文地址:https://www.cnblogs.com/mao2080/p/15344002.html
Copyright © 2020-2023  润新知