请求安全令牌

使用媒体工作流时,每个多媒体输入文件由媒体ID统一标识,一一对应。媒体ID可以关联多个格式、多个清晰度的输出,当您需要实现多清晰度自动切换、多格式支持播放时,可以使用媒体ID播放视频。媒体处理中为保证加密视频的安全性,加密视频的播放必须使用媒体ID的播放方式。通过媒体ID播放视频的过程中,为了确保访问的安全性和权限控制的有效性,需要借助访问控制RAM服务生成并使用安全令牌。本文为您介绍如何获得安全令牌。

前提条件

在请求安全令牌之前,您需要安装访问控制(RAM)服务提供的STS SDK。本文以Java为例,详细操作及代码示例请参见Java示例。如需其他语言代码示例,请参见STS SDK概览

使用前准备

您在请求之前需要先准备好STS需要的角色的参数roleArn

  1. 登录 RAM 控制台,单击 身份管理 > 角色

  2. 在角色列表中找到具体 角色名称 后,单击角色名称进入基本信息页面。

  3. 复制ARN参数并妥善保存,供后续使用。arn

操作步骤

  1. 在pom.xml文件中引用STS SDK。

    <repositories>
         <repository>
             <id>sonatype-nexus-staging</id>
             <name>Sonatype Nexus Staging</name>
             <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
             <releases>
                 <enabled>true</enabled>
             </releases>
             <snapshots>
                 <enabled>true</enabled>
             </snapshots>
         </repository>
     </repositories>
    <dependencies>
     <dependency>
       <groupId>com.aliyun</groupId>
       <artifactId>aliyun-java-sdk-sts</artifactId>
       <version>2.1.6</version>
     </dependency>
     <dependency>
       <groupId>com.aliyun</groupId>
       <artifactId>aliyun-java-sdk-core</artifactId>
       <version>2.2.0</version>
     </dependency>
    </dependencies>
    说明

    请访问Maven仓库获取aliyun-java-sdk-core的最新版本。

  2. 生成令牌。

    import com.aliyuncs.DefaultAcsClient;
    import com.aliyuncs.exceptions.ClientException;
    import com.aliyuncs.http.MethodType;
    import com.aliyuncs.http.ProtocolType;
    import com.aliyuncs.sts.model.v20150401.AssumeRoleRequest;
    import com.aliyuncs.sts.model.v20150401.AssumeRoleResponse;
    
    /**
     * 此接口仅支持通过RAM账号调用
     */
    public class STSTokenDemo {
    
        public static void main(String[] args) throws Exception {
            // 初始化Client。
            DefaultAcsClient client = InitClient.initMpsClient();
            // RoleArn 需要在 RAM 控制台上获取
            String roleArn = "acs:ram::174*********11242:role/sts-role";
    
            try {
                AssumeRoleResponse response = assumeRole(client, roleArn);
                System.out.println("Expiration: " + response.getCredentials().getExpiration());
                System.out.println("Access Key Id: " + response.getCredentials().getAccessKeyId());
                System.out.println("Access Key Secret: " + response.getCredentials().getAccessKeySecret());
                System.out.println("Security Token: " + response.getCredentials().getSecurityToken());
                System.out.println("RequestId: " + response.getRequestId());
    
            } catch (ClientException e) {
                System.out.println("Failed to get a token.");
                System.out.println("Error code: " + e.getErrCode());
                System.out.println("Error message: " + e.getErrMsg());
            }
        }
        /**生成临时AK和Token的函数*/
        private static AssumeRoleResponse assumeRole(
                DefaultAcsClient client,
                String roleArn)
                throws ClientException {
            final AssumeRoleRequest request = new AssumeRoleRequest();
            request.setVersion("2015-04-01");
            request.setMethod(MethodType.POST);
            request.setProtocol(ProtocolType.HTTPS);
            request.setDurationSeconds(900L);
            request.setRoleArn(roleArn);
            request.setRoleSessionName("test-token");
            return client.getAcsResponse(request);
        }
    }
  3. 调整Token有效期。

    示例代码中生成的Token有效时间为900秒,可以根据实际需求调整(最小900秒,最大3,600秒)。

    在有效期内,不需要反复生成新的Token,可以复用已经生成的Token。您可以通过以下方式判断何时需要重新生成Token:

    private static boolean isTimeExpire(String expiration) {
         Date nowDate = new Date();
         Date expireDate = javax.xml.bind.DatatypeConverter.parseDateTime(expiration).getTime();
         if (expireDate.getTime() <= nowDate.getTime()) {
             return true;
         } else {
             return false;
         }
    }

相关文档