日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

獲取STS臨時(shí)Token

更新時(shí)間:

從客戶端直接上傳文件到點(diǎn)播存儲(chǔ)(基于OSS)前,需要先獲取STS臨時(shí)Token。本文介紹在客戶端上傳場景下如何獲取STS臨時(shí)Token,為初始化上傳實(shí)例作準(zhǔn)備。

背景信息

目前客戶端上傳SDK支持兩種授權(quán)方式:

  • 使用上傳地址和憑證授權(quán)。

  • 使用STS方式授權(quán)。

阿里云臨時(shí)安全令牌STS(Security Token Service)是阿里云通用的鑒權(quán)方式。在客戶端通過STS方式上傳,上傳SDK內(nèi)部會(huì)封裝所有上傳的細(xì)節(jié),您只需要關(guān)注STS的獲取、過期刷新以及文件上傳完成的回調(diào)即可。關(guān)于如何選擇上傳憑證方式與STS方式授權(quán),請(qǐng)參見憑證方式與STS方式對(duì)比。如需使用上傳地址和憑證方式,請(qǐng)參見獲取上傳地址和憑證

上傳流程

使用STS方式上傳的完整的流程如下圖所示:客戶端STS方式上傳流程

  1. 用戶在上傳應(yīng)用服務(wù)器上部署授權(quán)服務(wù)(如集成阿里云STS SDK)用于獲取STS臨時(shí)Token。

  2. 客戶端向上傳應(yīng)用服務(wù)器發(fā)起請(qǐng)求獲取STS臨時(shí)Token。

  3. 上傳應(yīng)用服務(wù)器向阿里云STS服務(wù)發(fā)起請(qǐng)求獲取STS臨時(shí)Token。

  4. 阿里云STS服務(wù)返回上傳地址和憑證。

  5. 上傳應(yīng)用服務(wù)器向客戶端下發(fā)STS臨時(shí)Token。

  6. 客戶端使用STS臨時(shí)Token初始化上傳實(shí)例。

  7. 客戶端構(gòu)造請(qǐng)求發(fā)起上傳請(qǐng)求。

  8. OSS服務(wù)返回上傳結(jié)果。

    說明

    上傳結(jié)果也可以通過提前配置回調(diào)接收上傳相關(guān)事件來監(jiān)聽。

獲取STS臨時(shí)Token

為免去自行簽名等麻煩,建議集成STS SDK并通過SDK調(diào)用AssumeRole來獲取STS臨時(shí)Token。集成STS SDK前必須創(chuàng)建RAM用戶,RAM用戶角色并為角色授權(quán)訪問點(diǎn)播服務(wù)。

  1. 創(chuàng)建RAM用戶。操作指引請(qǐng)參見使用STS臨時(shí)授權(quán)方案上傳視頻

  2. (可選)如需自定義授權(quán),請(qǐng)參見基于RAM Policy實(shí)現(xiàn)自定義授權(quán)

  3. 集成STS SDK并通過SDK調(diào)用AssumeRole來獲取STS臨時(shí)Token。操作步驟根據(jù)使用的語言不同而不同。

    服務(wù)端語言

    操作指引

    Java

    Java示例

    說明

    下文提供了Java語言的示例代碼詳解。

    Python

    Python示例

    PHP

    PHP示例

    .NET

    .NET示例

    Node.js

    Node.js示例

    Go

    Go示例

Java示例

Java獲取STS臨時(shí)Token示例代碼

說明

此處以集成3.1.1版本的原版STS SDK為例進(jìn)行獲取STS臨時(shí)Token示例說明,如需集成其余版本的STS SDK,詳細(xì)信息,請(qǐng)參見STS SDK概覽

  1. 集成STS SDK。

    添加STS SDK依賴。

    <dependencies>
      <!--  原版 SDK  -->
      <dependency>
        <groupId>com.aliyun</groupId>
        <artifactId>aliyun-java-sdk-sts</artifactId>
        <version>3.1.1</version>
      </dependency>
    </dependencies>

    添加核心庫SDK Core依賴。

    <dependency>
      <groupId>com.aliyun</groupId>
      <artifactId>aliyun-java-sdk-core</artifactId>
      <version>4.6.1</version>
    </dependency>
  2. 調(diào)用AssumeRole獲取STS臨時(shí)Token。

    展開查看代碼

    
    import com.aliyuncs.DefaultAcsClient;
    import com.aliyuncs.exceptions.ClientException;
    import com.aliyuncs.http.MethodType;
    import com.aliyuncs.profile.DefaultProfile;
    import com.aliyuncs.profile.IClientProfile;
    import com.aliyuncs.sts.model.v20150401.AssumeRoleRequest;
    import com.aliyuncs.sts.model.v20150401.AssumeRoleResponse;
    
    
    /**
     * @author jack
     * @date 2020/5/25
     */
    public class TestStsService {
    
        public static void main(String[] args) {
            // 只有RAM用戶(子賬號(hào))才能調(diào)用 AssumeRole 接口
            // 阿里云主賬號(hào)的AccessKeys不能用于發(fā)起AssumeRole請(qǐng)求
            // 請(qǐng)首先在RAM控制臺(tái)創(chuàng)建一個(gè)RAM用戶,并為這個(gè)用戶創(chuàng)建AccessKeys
            // 請(qǐng)確保代碼運(yùn)行環(huán)境設(shè)置了環(huán)境變量 ALIBABA_CLOUD_ACCESS_KEY_ID 和 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
            String accessKeyId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
            String accessKeySecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
            // AssumeRole API 請(qǐng)求參數(shù): RoleArn, RoleSessionName, Policy, and DurationSeconds
            // RoleArn 需要在 RAM 控制臺(tái)上獲取
            String roleArn = "acs:ram::174809843091****:role/vodrole";
            // RoleSessionName 角色會(huì)話名稱,自定義參數(shù)
            String roleSessionName = "session-name";// 自定義即可
            // 定制你的policy
            String policy = "{\n" +
                    "  \"Version\": \"1\",\n" +
                    "  \"Statement\": [\n" +
                    "    {\n" +
                    "      \"Action\": \"vod:*\",\n" +
                    "      \"Resource\": \"*\",\n" +
                    "      \"Effect\": \"Allow\"\n" +
                    "    }\n" +
                    "  ]\n" +
                    "}";
            try {
                AssumeRoleResponse response = assumeRole(accessKeyId, accessKeySecret, roleArn, roleSessionName, policy);
                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());
    
                createUploadVideo(response.getCredentials().getAccessKeyId(), response.getCredentials().getAccessKeySecret(), response.getCredentials().getSecurityToken());
            } 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());
            }
        }
    
        static AssumeRoleResponse assumeRole(String accessKeyId, String accessKeySecret, String roleArn, String roleSessionName, String policy) throws ClientException {
            try {
                //構(gòu)造default profile(參數(shù)留空,無需添加Region ID)
                /*
                說明:當(dāng)設(shè)置SysEndpoint為sts.aliyuncs.com時(shí),regionId可填可不填;反之,regionId必填,根據(jù)使用的服務(wù)區(qū)域填寫,例如:cn-shanghai
                詳情參考STS各地域的Endpoint,請(qǐng)參見接入地址。
                 */
                IClientProfile profile = DefaultProfile.getProfile("", accessKeyId, accessKeySecret);
                //用profile構(gòu)造client
                DefaultAcsClient client = new DefaultAcsClient(profile);
                // 創(chuàng)建一個(gè) AssumeRoleRequest 并設(shè)置請(qǐng)求參數(shù)
                final AssumeRoleRequest request = new AssumeRoleRequest();
                request.setSysEndpoint("sts.aliyuncs.com");
                request.setSysMethod(MethodType.POST);
                request.setRoleArn(roleArn);
                request.setRoleSessionName(roleSessionName);
                request.setPolicy(policy);
                // 發(fā)起請(qǐng)求,并得到response
                final AssumeRoleResponse response = client.getAcsResponse(request);
                return response;
            } catch (ClientException e) {
                throw e;
            }
        }
                    

    參數(shù)

    描述

    RoleArn

    需要扮演的角色I(xiàn)D。為RAM用戶創(chuàng)建好角色后,角色的ID可以從RAM控制臺(tái)獲取。獲取路徑:控制臺(tái)的身份管理 > 角色,單擊角色名稱后,在基本信息中可以復(fù)制ARN。

    RoleSessionName

    角色會(huì)話名稱。該參數(shù)為用戶自定義參數(shù)。通常設(shè)置為調(diào)用該API的用戶身份,例如:用戶名。在操作審計(jì)日志中,即使是同一個(gè)RAM角色執(zhí)行的操作,也可以根據(jù)不同的RoleSessionName來區(qū)分實(shí)際操作者,以實(shí)現(xiàn)用戶級(jí)別的訪問審計(jì)。長度為2~64個(gè)字符,可包含英文字母、數(shù)字、半角句號(hào)(.)、at(@)、短劃線(-)和下劃線(_)。

    Policy

    在扮演角色的時(shí)候額外加上一個(gè)權(quán)限限制。

    說明
    • Policy是用來限制扮演角色之后的臨時(shí)憑證的權(quán)限。最后臨時(shí)憑證獲得的權(quán)限是角色的權(quán)限和這里傳入的Policy的交集。

    • 在扮演角色的時(shí)候傳入Policy的原因是為了靈活性,比如只能使用CreateUploadVideo接口。

    DurationSeconds

    臨時(shí)憑證的有效期,單位為秒,最小為900,最大為3600。

    accessKeyId和accessKeySecret

    需要扮演角色的RAM用戶,及其AccessKey Secret。

使用STS臨時(shí)Token上傳

STS臨時(shí)Token與每個(gè)文件一一對(duì)應(yīng),因此需要在開始上傳的回調(diào)里,去用戶應(yīng)用服務(wù)器獲取STS臨時(shí)Token并設(shè)置給對(duì)應(yīng)的上傳實(shí)例。具體設(shè)置因客戶端不同而不同。

客戶端

使用指引

Web

使用JavaScript SDK上傳媒體文件

Android

Android端文件上傳

iOS

文件上傳

微信小程序

微信小程序上傳SDK