请求安全令牌
使用媒体工作流时,每个多媒体输入文件由媒体ID统一标识,一一对应。媒体ID可以关联多个格式、多个清晰度的输出,当您需要实现多清晰度自动切换、多格式支持播放时,可以使用媒体ID播放视频。媒体处理中为保证加密视频的安全性,加密视频的播放必须使用媒体ID的播放方式。通过媒体ID播放视频的过程中,为了确保访问的安全性和权限控制的有效性,需要借助访问控制RAM服务生成并使用安全令牌。本文为您介绍如何获得安全令牌。
前提条件
在请求安全令牌之前,您需要安装访问控制(RAM)服务提供的STS SDK。本文以Java为例,详细操作及代码示例请参见Java示例。如需其他语言代码示例,请参见STS SDK概览。
使用前准备
您在请求之前需要先准备好STS需要的角色的参数roleArn
。
登录 RAM 控制台,单击 。
在角色列表中找到具体 角色名称 后,单击角色名称进入基本信息页面。
复制ARN参数并妥善保存,供后续使用。
操作步骤
在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
的最新版本。生成令牌。
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); } }
调整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; } }