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

控制臺內嵌及分享(新版)延長訪問時間

如果您需要將日志服務的查詢分析結果、儀表盤等頁面,分享給其他人或者嵌入到第三方系統,可以通過CreatTicket接口生成ticket,然后拼接成免密且免登錄的鏈接進行分享。但通過CreatTicket接口生成的ticket只有短暫的有效期,如果需要刷新可免密且免登錄鏈接的有效時間,可以使用RefreshToken接口。本文介紹詳細的操作步驟。

工作原理

image

前提條件

已經已生成免密且免登錄鏈接,操作步驟請參見控制臺內嵌及分享(新版)

操作步驟

步驟一:為RAM用戶授權

如果使用阿里云主賬號,可跳過這步,直接前往步驟二。

  1. 使用生成內嵌的RAM用戶登錄RAM控制臺

  2. 為RAM用戶授予調用RefreshToken接口權限。具體操作步驟請參見為RAM用戶授權創建自定義權限策略

    {
        "Version": "1",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": "log:RefreshToken",
                "Resource": "acs:log:*:*:ticket/*"
            }
        ]
    }

步驟二:內嵌鏈接增加參數

控制臺內嵌及分享(新版)生成的鏈接拼接supportRefreshToken參數,該參數用于指示第三方是否支持刷新令牌(RefreshToken)。設置為supportRefreshToken=true,表示允許鏈接延長訪問時間。

https://sls.console.aliyun.com/lognext/project/<Project名稱>/dashboard/<儀表盤ID>?sls_ticket=eyJ***************.eyJ******************.KUT****************&supportRefreshToken=true&isShare=true&hideTopbar=true&hideSidebar=true&ignoreTabLocalStorage=true

步驟三:客戶端增加監聽事件

客戶端監聽message事件,將最新的accessToken傳給iframe

window.addEventListener('message', async (e) => {
  if (e?.data?.type === 'refreshToken') {
    const accessToken = await callApi()
    document.querySelector('#myIframe').contentWindow.postMessage(
      {
        // 固定為applyAccessToken
        type: 'applyAccessToken',
        // 調用callApi返回的accessToken
        accessToken,
        // createTicket接口返回的ticket
        ticket: e.data.ticket,
      },
      '*'
    )
  }
})
重要
  • callApi()方法是自定義方法。作用是應用客戶端調用應用服務端的API,服務端的API作用是調用開發門戶的RefreshToken獲取accesstoken。集成RefreshToken代碼請參見代碼示例

  • 調用RefreshToken獲取accessToken,服務地址只能是華東2(上海)新加坡,但獲取的accessToken可以在各個地域使用。

  • RefreshToken的兩個入參:ticketCreateTicket生成的票據。accessTokenExpirationTime表示調用接口生成的訪問令牌過期時間(秒),默認86400秒(一天),最大86400秒(一天)。該票據最多延長過期時間為30天(RefreshToken每天在過期之前調用一次),30天后該票據過期。

代碼示例

RefreshToken代碼示例如下:

Java

  1. 添加Maven依賴。

    在Java項目的根目錄下,打開pom.xml文件,添加以下代碼:

        <dependency>
          <groupId>com.aliyun</groupId>
          <artifactId>sls20201230</artifactId>
          <version>5.2.1</version>
        </dependency>
        <dependency>
          <groupId>com.aliyun</groupId>
          <artifactId>tea-openapi</artifactId>
          <version>0.3.2</version>
        </dependency>
        <dependency>
          <groupId>com.aliyun</groupId>
          <artifactId>tea-console</artifactId>
          <version>0.0.1</version>
        </dependency>
        <dependency>
          <groupId>com.aliyun</groupId>
          <artifactId>tea-util</artifactId>
          <version>0.2.21</version>
        </dependency>
  2. 生成accessToken

    // This file is auto-generated, don't edit it. Thanks.
    package com.aliyun.sample;
    
    import com.aliyun.sls20201230.Client;
    import com.aliyun.tea.*;
    
    public class Sample {
    
        /**
         * 使用AK&SK初始化賬號Client
         * @return Client
         * @throws Exception
         */
        public static Client createClient() throws Exception {
            // 工程代碼泄露可能會導致 AccessKey 泄露,并威脅賬號下所有資源的安全性。以下代碼示例僅供參考。
            // 建議使用更安全的 STS 方式。
            com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
                    // 必填,請確保代碼運行環境設置了環境變量 ALIBABA_CLOUD_ACCESS_KEY_ID。
                    .setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
                    // 必填,請確保代碼運行環境設置了環境變量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
                    .setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
            // Endpoint 請參考 https://api.aliyun.com/product/Sls
            config.endpoint = "cn-shanghai.log.aliyuncs.com";
            return new Client(config);
        }
    
        public static void main(String[] args_) throws Exception {
            java.util.List<String> args = java.util.Arrays.asList(args_);
            com.aliyun.sls20201230.Client client = Sample.createClient();
            com.aliyun.sls20201230.models.RefreshTokenRequest refreshTokenRequest = new com.aliyun.sls20201230.models.RefreshTokenRequest()
                    .setTicket("eyJ***************.eyJ******************.KUT****************")
                    .setAccessTokenExpirationTime(60L);
            com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
            java.util.Map<String, String> headers = new java.util.HashMap<>();
            try {
                com.aliyun.sls20201230.models.RefreshTokenResponse resp = client.refreshTokenWithOptions(refreshTokenRequest, headers, runtime);
                com.aliyun.teaconsole.Client.log(com.aliyun.teautil.Common.toJSONString(resp));
            } catch (TeaException error) {
                // 此處僅做打印展示,請謹慎對待異常處理,在工程項目中切勿直接忽略異常。
                // 錯誤 message
                System.out.println(error.getMessage());
                // 診斷地址
                System.out.println(error.getData().get("Recommend"));
                com.aliyun.teautil.Common.assertAsString(error.message);
            } catch (Exception _error) {
                TeaException error = new TeaException(_error.getMessage(), _error);
                // 此處僅做打印展示,請謹慎對待異常處理,在工程項目中切勿直接忽略異常。
                // 錯誤 message
                System.out.println(error.getMessage());
                // 診斷地址
                System.out.println(error.getData().get("Recommend"));
                com.aliyun.teautil.Common.assertAsString(error.message);
            }        
        }
    }
    

Python

# -*- coding: utf-8 -*-
# This file is auto-generated, don't edit it. Thanks.
import os
import sys

from typing import List

from alibabacloud_sls20201230.client import Client as Sls20201230Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_sls20201230 import models as sls_20201230_models
from alibabacloud_tea_util import models as util_models
from alibabacloud_tea_util.client import Client as UtilClient


class Sample:
    def __init__(self):
        pass

    @staticmethod
    def create_client() -> Sls20201230Client:
        """
        使用AK&SK初始化賬號Client
        @return: Client
        @throws Exception
        """
        # 工程代碼泄露可能會導致 AccessKey 泄露,并威脅賬號下所有資源的安全性。以下代碼示例僅供參考。
        # 建議使用更安全的 STS 方式。
        config = open_api_models.Config(
            # 必填,請確保代碼運行環境設置了環境變量 ALIBABA_CLOUD_ACCESS_KEY_ID。,
            access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
            # 必填,請確保代碼運行環境設置了環境變量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。,
            access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
        )
        # Endpoint 請參考 https://api.aliyun.com/product/Sls
        config.endpoint = f'cn-shanghai.log.aliyuncs.com'
        return Sls20201230Client(config)

    @staticmethod
    def main(
        args: List[str],
    ) -> None:
        client = Sample.create_client()
        refresh_token_request = sls_20201230_models.RefreshTokenRequest(
            ticket='eyJ***************.eyJ******************.KUT****************',
            access_token_expiration_time=60
        )
        runtime = util_models.RuntimeOptions()
        headers = {}
        try:
            # 復制代碼運行請自行打印 API 的返回值
            client.refresh_token_with_options(refresh_token_request, headers, runtime)
        except Exception as error:
            # 此處僅做打印展示,請謹慎對待異常處理,在工程項目中切勿直接忽略異常。
            # 錯誤 message
            print(error.message)
            # 診斷地址
            print(error.data.get("Recommend"))
            UtilClient.assert_as_string(error.message)

    @staticmethod
    async def main_async(
        args: List[str],
    ) -> None:
        client = Sample.create_client()
        refresh_token_request = sls_20201230_models.RefreshTokenRequest(
            ticket='eyJ***************.eyJ******************.KUT****************',
            access_token_expiration_time=60
        )
        runtime = util_models.RuntimeOptions()
        headers = {}
        try:
            # 復制代碼運行請自行打印 API 的返回值
            await client.refresh_token_with_options_async(refresh_token_request, headers, runtime)
        except Exception as error:
            # 此處僅做打印展示,請謹慎對待異常處理,在工程項目中切勿直接忽略異常。
            # 錯誤 message
            print(error.message)
            # 診斷地址
            print(error.data.get("Recommend"))
            UtilClient.assert_as_string(error.message)


if __name__ == '__main__':
    Sample.main(sys.argv[1:])