全部產品
Search
文件中心

Mobile Platform as a Service:使用 STS 方式調用 OpenAPI

更新時間:Feb 03, 2026

配置環境變數

配置環境變數 MPAAS_AK_ENV 和 MPAAS_SK_ENV。

  • Linux 和 macOS 系統配置方法執行以下命令:

    export MPAAS_AK_ENV=<ACCESS_KEY_ID>
    export MPAAS_SK_ENV=<ACCESS_KEY_SECRET>
    說明

    其中 <ACCESS_KEY_ID> 替換為已準備好的 AccessKey ID,<ACCESS_KEY_SECRET> 替換為 AccessKey Secret。

  • Windows 系統配置方法:

    1. 建立環境變數,添加環境變數 MPAAS_AK_ENV 和 MPAAS_SK_ENV,並寫入已準備好的 AccessKey ID 和 AccessKey Secret。

    2. 重啟 Windows 系統。

前置條件

  1. 登入 RAM 控制台 建立一個使用者,擷取到使用者的存取金鑰(AccessKey ID 和 AccessKey Secret)。

  2. 為 RAM 使用者授予請求 AssumeRole 的許可權。

    建立完 RAM 使用者後,使用 阿里雲主帳號 或擁有 存取控制(RAM)系統管理權限的 RAM 帳號 授予該 RAM 使用者通過扮演角色調用 STS 服務的許可權 AliyunSTSAssumeRoleAccess

    說明

    授予 RAM 使用者調用 STS 服務 AssumeRole 介面的固定許可權是 AliyunSTSAssumeRoleAccess,與後續擷取臨時訪問憑證以及通過臨時訪問憑證發起 mPaaS 請求要求的權限無關。

建立 RAM 角色

使用 阿里雲主帳號 或擁有 存取控制(RAM)系統管理權限的 RAM 帳號 建立 RAM 角色用於定義 RAM 角色被扮演時,可以獲得的存取權限。

  1. 登入 RAM 控制台

  2. 在左側導覽列,選擇 身份管理 > 角色

  3. 角色 頁面,單擊 建立角色

  4. 建立角色 頁面,選擇 信任主體類型 雲帳號,然後選擇 信任主體名稱 當前雲帳號,單擊 確定

    image.png

  5. 建立角色 對話方塊,輸入角色名稱,然後單擊 確定

  6. 單擊 ARN 右側的 複製,儲存角色的 ARN。

    image.png

為 RAM 角色授予 mPaaS 的許可權

建立完 RAM 角色後,使用 阿里雲主帳號 或擁有 存取控制(RAM)系統管理權限的 RAM 帳號 為 RAM 角色附加一個或多個權限原則,明確 RAM 角色在被扮演時所能擁有的存取權限,如 MpaasFullAccess 許可權。

使用 RAM 使用者扮演 RAM 角色擷取臨時訪問憑證

重要

STS 臨時訪問憑證無法通過阿里雲主帳號的存取金鑰(AccessKey)調用 STS API 介面擷取,否則會導致報錯失敗。以下樣本將以使用 RAM 使用者的存取金鑰(AccessKey)為例進行操作。

  • 為角色授予上傳檔案的許可權後,RAM 使用者需要通過扮演角色來擷取臨時訪問憑證。臨時訪問憑證包括安全性權杖(SecurityToken)、臨時存取金鑰(AccessKeyId 和 AccessKeySecret)以及到期時間(Expiration)。您可以使用 STS SDK 擷取臨時訪問憑證。有關更多語言的 STS SDK 樣本,請參見STS SDK 概覽

  • 範例程式碼中的 endpoint 為 STS 服務存取點地址。為了獲得更快的 STS 服務響應速度,您可以根據伺服器所處地區,選擇對應的或相近的 STS 服務存取點地址進行填寫。有關 STS 服務存取點地址資訊,請參見 服務存取點

    import com.alibaba.fastjson.JSON;
    import com.aliyun.mpaas20201028.models.QueryMcubeVhostRequest;
    import com.aliyun.mpaas20201028.models.QueryMcubeVhostResponse;
    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.auth.sts.AssumeRoleRequest;
    import com.aliyuncs.auth.sts.AssumeRoleResponse;
    import com.aliyun.mpaas20201028.Client;
    
    public class StsServiceSample {
    
    
        /**
         * mPaaS控制台上對應的APP ID
         */
        private static final String APP_ID = "ALIPUB40DXXXXXXX";
    
        /**
         * mPaaS控制台上對應的工作空間id
         */
        private static final String WORKSPACE_ID = "default";
    
        /**
         * mPaaS控制台上對應的租戶id
         */
        private static final String TENANT_ID = "XVXXXXXF";
    
        public static void main(String[] args) {
            // STS服務存取點,例如sts.cn-hangzhou.aliyuncs.com。您可以通過公網或者VPC接入STS服務。       
            String endpoint = "sts.cn-hangzhou.aliyuncs.com";
            // 從環境變數中擷取步驟1產生的RAM使用者的存取金鑰(AccessKey ID和AccessKey Secret)。
            String accessKeyId = System.getenv("ACCESS_KEY_ID");
            String accessKeySecret = System.getenv("ACCESS_KEY_SECRET");
            // 從環境變數中擷取步驟3.6產生的RAM角色的RamRoleArn。
            String roleArn = System.getenv("RAM_ROLE_ARN");
            // 自訂角色會話名稱,用來區分不同的令牌。        
            String roleSessionName = "yourRoleSessionName";
            // 臨時訪問憑證將獲得角色擁有的所有許可權。      
            String policy = null;
            // 臨時訪問憑證的有效時間,單位為秒。最小值為900,最大值以當前角色設定的最大會話時間為準。當前角色最大會話時間取值範圍為3600秒~43200秒,預設值為3600秒。
            Long durationSeconds = 3600L;
            try {
                // 發起STS請求所在的地區。
                String regionId = "";
                // 添加endpoint。適用於Java SDK 3.12.0及以上版本。
                DefaultProfile.addEndpoint("", "", "Sts", endpoint);
                // 添加endpoint。適用於Java SDK 3.12.0以下版本。
                // DefaultProfile.addEndpoint("",regionId, "Sts", endpoint);
                // 構造default profile。
                IClientProfile profile = DefaultProfile.getProfile(regionId, accessKeyId, accessKeySecret);
                // 構造client。
                DefaultAcsClient client = new DefaultAcsClient(profile);
    
    
                final AssumeRoleRequest request = new AssumeRoleRequest();
                // 適用於Java SDK 3.12.0及以上版本。
                request.setMethod(MethodType.POST);
                // 適用於Java SDK 3.12.0以下版本。
                // request.setMethod(MethodType.POST);
                request.setRoleArn(roleArn);
                request.setRoleSessionName(roleSessionName);
                // 若policy為空白,則使用者將獲得該角色下所有許可權
                request.setPolicy(policy);
                request.setDurationSeconds(durationSeconds);
                final AssumeRoleResponse response = client.getAcsResponse(request);
                // 列印擷取到的sts資訊
                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());
    
                com.aliyun.teaopenapi.models.Config stsConfig = new com.aliyun.teaopenapi.models.Config()
                        .setAccessKeyId(response.getCredentials().getAccessKeyId())
                        .setAccessKeySecret(response.getCredentials().getAccessKeySecret())
                        .setSecurityToken(response.getCredentials().getSecurityToken())
                        // mpaas服務調用地址
                        .setEndpoint("mpaas.cn-hangzhou.aliyuncs.com");
    
                Client stsclient = new Client(stsConfig);
                QueryMcubeVhostRequest queryMcubeVhostRequest = new QueryMcubeVhostRequest();
                queryMcubeVhostRequest.setAppId(APP_ID);
                queryMcubeVhostRequest.setWorkspaceId(WORKSPACE_ID);
                queryMcubeVhostRequest.setTenantId(TENANT_ID);
                try {
                    QueryMcubeVhostResponse queryMcubeVhostResponse = stsclient.queryMcubeVhost(queryMcubeVhostRequest);
                    System.out.println(queryMcubeVhostResponse.getBody().getResultCode());
                    System.out.println(JSON.toJSONString(queryMcubeVhostResponse.getBody().getQueryVhostResult()));
                } catch (Exception e) {
                    throw new RuntimeException(e);
                }
    
    
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
        }
    }