全部產品
Search
文件中心

Data Management:免登訪問DMS控制台

更新時間:Jun 12, 2026

您可以在自己的研發平台或工具平台嵌入免登訪問DMS控制台連結,實現無需使用阿里雲帳號或RAM使用者登入就可以直接存取DMS控制台,使用DMS的相關功能。本文介紹構造免登訪問DMS控制台連結的操作步驟。

操作流程

  1. 建立訪問DMS的RAM角色,並為其授權,再建立一個RAM使用者(子帳號)並為其授予AliyunSTSAssumeRoleAccess許可權。建立及授權的詳細資料,請參見準備工作

  2. 擷取扮演角色的臨時身份憑證,包含AccessKey ID、AccessKey Secret和SecurityToken,該憑證用於擷取登入令牌(SigninToken)。具體的操作步驟,請參見步驟一:擷取扮演角色的臨時身份憑證

  3. 擷取SigninToken,用於構造免登入訪問連結。具體的操作步驟,請參見步驟二:擷取SigninToken

  4. 構造免登入訪問連結。具體的操作步驟,請參見步驟三:構造免登入訪問連結

Maven依賴

<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>sts20150401</artifactId>
    <version>1.1.7</version>
</dependency>

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>2.0.53</version>
</dependency>

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.14</version>
</dependency>

Java程式碼範例

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.aliyun.sts20150401.Client;
import com.aliyun.sts20150401.models.*;
import com.aliyun.teaopenapi.models.Config;
import com.aliyun.teautil.models.RuntimeOptions;
import org.apache.http.HttpStatus;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

import java.io.IOException;
import java.net.URISyntaxException;

/*
  建立子帳號、授權帳號
 */
  String accountId = "主帳號UID";
 // 用來訪問DMS產品的Role,根據您的需求添加AliyunDMSReadOnlyAccess(唯讀),AliyunDMSFullAccess許可權
  String ramRoleArn = "準備工作中建立的RoleArn";
 // 子帳號的AccessKey ID、AccessKey Secret,還需要AliyunSTSAssumeRoleAccess許可權
  String accessKeyId = "";
  String accessKeySecret = "";
 /*
  Step1 通過AssumeRole介面擷取臨時的AccessKey ID、AccessKey Secret和SecurityToken
 */
  AssumeRoleResponse.AssumeRoleResponseBodyCredentials credentials = assumeRole(accountId, accessKeyId, accessKeySecret, ramRoleArn);
  System.out.println("Expiration: " + credentials.getExpiration());
  System.out.println("Access Key Id: " + credentials.getAccessKeyId());
  System.out.println("Access Key Secret: " + credentials.getAccessKeySecret());
  System.out.println("Security Token: " + credentials.getSecurityToken());

  /*
  Step2 擷取SigninToken
  */
  String signInToken = getSignInToken(credentials.getAccessKeyId(),
  credentials.getAccessKeySecret(),
  credentials.getSecurityToken());
  System.out.println("Your SigninToken is: " + signInToken);

 /*
  Step3 構造免登入訪問連結,例如DMS控制台首頁
 */
  String pageUrl = getDmsLoginUrl("https://dms.aliyun.com", signInToken);
  System.out.println("Your PageUrl is : " + pageUrl);

準備工作

說明

若您已具備如下全部條件,可直接根據步驟一、二、三進行操作。

步驟一:擷取扮演角色的臨時身份憑證

以RAM使用者或RAM角色調用AssumeRole介面,擷取扮演角色的臨時身份憑證。關於AssumeRole介面的更多資訊,請參見AssumeRole

Java程式碼範例如下。

  /**
  * 通過AssumeRole介面擷取使用者臨時身份
  */
  private static AssumeRoleResponse.AssumeRoleResponseBodyCredentials assumeRole(
                    String accountId, String accessKeyId,
                    String accessKeySecret, String ramRoleArn) throws Exception {
    // 配置 STS 用戶端
    Config config = new Config()
        .setAccessKeyId(accessKeyId)
        .setAccessKeySecret(accessKeySecret)
        // 注意:STS 的 endpoint 是全域固定的,通常使用 sts.cn-hangzhou.aliyuncs.com
        .setEndpoint("sts.cn-hangzhou.aliyuncs.com");
    Client client = new Client(config);
    AssumeRoleRequest request = new AssumeRoleRequest();
    // ARN是角色的全域資源描述符,用來指定具體角色
    request.setRoleArn(ramRoleArn);
    // 使用者自訂參數。此參數用來區分不同的令牌,可用於使用者層級的訪問審計,格式:^[a-zA-Z0-9\.@\-_]+$
    request.setRoleSessionName("session-name");
    request.setDurationSeconds(3600L); // 顯式設定有效期間(秒)
    RuntimeOptions runtime = new RuntimeOptions();
    AssumeRoleResponse response = client.assumeRoleWithOptions(request, runtime);
    return response.getBody().getCredentials();
  }

步驟二:擷取SigninToken

調用GetSigninToken介面,擷取SigninToken。

Java程式碼範例如下。

  /**
     * 使用安全性權杖擷取SigninToken
     *
     * @param accesskeyId
     * @param accessKeySecret
     * @param securityToken
     * @return
     * @throws IOException
     * @throws URISyntaxException
     */
    private static String getSignInToken(String accesskeyId, String accessKeySecret, String securityToken)
        throws IOException, URISyntaxException {
        URIBuilder builder = new URIBuilder("http://signin.aliyun.com/federation");

        builder.setParameter("Action", "GetSigninToken")
            .setParameter("AccessKeyId", accesskeyId)
            .setParameter("AccessKeySecret", accessKeySecret)
            .setParameter("SecurityToken", securityToken)
            .setParameter("TicketType", "normal");

        HttpGet request = new HttpGet(builder.build());
        CloseableHttpClient httpclient = HttpClients.createDefault();

        try (CloseableHttpResponse response = httpclient.execute(request)) {
            if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
                String context = EntityUtils.toString(response.getEntity());
                JSONObject jsonObject = JSON.parseObject(context);
                return jsonObject.getString("SigninToken");
            } else {
                System.out.println(response.getStatusLine());
            }
        }
        return null;
    }

步驟三:構造免登入訪問連結

說明

擷取的SigninToken在構造訪問連結時只能使用一次,如有業務需要再次使用SigninToken,請重新擷取。

Java程式碼範例如下。

請求樣本:

private static String getDmsLoginUrl(String pageUrl, String signInToken) throws URISyntaxException {
        URIBuilder builder = new URIBuilder("http://signin.aliyun.com/federation");
        builder.setParameter("Action", "Login");
        // 登入失效跳轉的地址,一般配置為自建WEB配置302跳轉的URL
        builder.setParameter("LoginUrl", "https://signin.aliyun.com/login.htm");
        // 實際訪問DMS的頁面
        builder.setParameter("Destination", pageUrl);
        builder.setParameter("SigninToken", signInToken);
        HttpGet request = new HttpGet(builder.build());
        return request.getURI().toString();
}

返回樣本:

Expiration: 2020-11-30T06:16:20Z
Access Key Id: STS.NT7L6Jp5Y8W9LNvGQku2x****
Access Key Secret: 4nU8F6rv8MCDR8tygMDnXvN9yCNBCVrxnqArj1n1****
Security Token: CAIS/gF1q6Ft5B2yfSjIr5e****+nep4j5XSTmjHo1E+eb1Ujo7xijz2IH9IeXhpB****/43nWlU7PkYlrloRoReREvCKM1565kSqFn6O11Qf****+5qsoasPETOITyZtZagToeUZdfZfejXGDKgvyRvwLz****/Vli+S/OggoJmadJlNWvRL0AxZrFsKxBltdUROF****+pKWSKuGfLC1dysQcO4gEWq4bHm5zAs0OH1QOhlrVP+N+qfqLJNZc8YM1NNP6ux/Fze6b71ypd1gNH7q8ejtYfpmua74jBXgUAuU3faraOrYd1SwZ9Z7knH****/n6ifBjpvw9Hlk0R9OcVhqAAXpZx****+STGa8vctRwyTWdMM5LByes3cr1D46jaj0****/lTMkoXCwjMlCs7sc+DA9xjJCcl57eKC7A3ThnJAWQyyeKZfIGgeHN7yUS5ND8r7TBn6bMUqwvfVX****/cbkzBX6iV6jrataHZPZdtQYHH6GgvQ5XZUZJjoD****
Your SigninToken is: 06ec409b9d8c48f6ac5dcd18a0513ee1dhUkhcRn5CMsDqffC4wxsuFt9xjYtYePmYTHEWSMVKLFyXXnSq3IUbon1v46wCmKPwrAejDvw2i8rilolPSuxpKRDxz****
Your PageUrl is : http://signin.aliyun.com/federation?Action=Login&LoginUrl=https%3A%2F%2Fsignin.aliyun.com%2Flogin.htm&Destination=https%3A%2F%2Fdms.aliyun.com&SigninToken=06ec409b9d8c48f6ac5dcd18a0513ee1dhUkhcRn5CMsDqffC4wxsuFt9xjYtYePmYTHEWSMVKLFyXXnSq3IUbon1v46wCmKPwrAejDvw2i8rilolPSuxpKRDxzD****

免登入訪問連結(PageUrl)的格式樣本如下。

http://signin.aliyun.com/federation?Action=Login
                            &LoginUrl=<登入失效跳轉的地址,一般配置為自建WEB配置302跳轉的URL>
                            &Destination=<實際訪問DMS服務頁面>
                            &SigninToken=<擷取的登入TOKEN>

說明

Destination對應的DMS服務頁面,與TicketType類型有關。

  • 若類型為normal,則對應的DMS網域名稱為http://dms.aliyun.com

  • 若類型為mini,則一般應用於BID虛擬商。對應的網域名稱http://dms-ent4service.aliyun.com

後續步驟

通過構造的免登入訪問連結(PageUrl)進入DMS控制台。登入成功後,DMS控制台右上方的使用者資訊中會顯示當前登入身份,格式為{RAM角色名稱}/{RoleSessionName}(如aliyunlogintest/session-name-123)。