全部产品
Search
文档中心

Simple Log Service:Memperpanjang periode validitas URL ke halaman konsol yang disematkan

更新时间:Jul 02, 2025

Layanan Log Sederhana memungkinkan Anda berbagi halaman hasil kueri, analisis, serta dasbor dari konsol Layanan Log Sederhana dengan pengguna lain. Anda juga dapat menyematkan halaman konsol tersebut ke dalam sistem pihak ketiga. Dengan cara ini, pengguna lain dapat melihat log Anda tanpa kata sandi atau login. URL dari halaman yang dibagikan dikenal sebagai URL tanpa kata sandi dan tanpa login. Anda dapat memanggil operasi CreateTicket untuk mendapatkan Tiket dan menghasilkan URL tanpa kata sandi dan tanpa login berdasarkan tiket serta URL halaman konsol yang ingin dibagikan. Tiket yang dihasilkan oleh operasi CreateTicket hanya berlaku untuk jangka waktu pendek, sehingga periode validitas URL tanpa kata sandi dan tanpa login yang dihasilkan juga singkat. Jika ingin memperpanjang periode validitas, Anda dapat memanggil operasi RefreshToken. Topik ini menjelaskan cara memperpanjang periode validitas URL tanpa kata sandi dan tanpa login.

Cara kerjanya

Prasyarat

URL tanpa kata sandi dan tanpa login telah dihasilkan. Untuk informasi lebih lanjut, lihat Menyematkan Halaman Konsol dan Berbagi Data Log (Versi Baru).

Prosedur

Langkah 1: Memberikan izin yang diperlukan kepada pengguna RAM

Jika Anda menggunakan akun Alibaba Cloud, Anda dapat melewati langkah ini dan melanjutkan ke Langkah 2.

  1. Masuk ke Konsol Resource Access Management (RAM) menggunakan pengguna RAM yang menghasilkan URL tanpa kata sandi dan tanpa login.

  2. Berikan izin untuk memanggil operasi RefreshToken kepada pengguna RAM. Untuk informasi lebih lanjut, lihat Memberikan Izin kepada Pengguna RAM dan Buat Kebijakan Kustom.

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

Langkah 2: Tambahkan parameter ke URL tanpa kata sandi dan tanpa login

Gabungkan URL tanpa kata sandi dan tanpa login dengan parameter supportRefreshToken. Parameter supportRefreshToken menentukan apakah server pihak ketiga mendukung operasi RefreshToken. Atur parameter supportRefreshToken menjadi true untuk memperpanjang periode validitas URL tanpa kata sandi dan tanpa login.

https://sls.console.alibabacloud.com/lognext/project/<Nama Proyek>/dashboard/<ID Dasbor>?sls_ticket=eyJ***************.eyJ******************.KUT****************&supportRefreshToken=true&isShare=true&hideTopbar=true&hideSidebar=true&ignoreTabLocalStorage=true

Langkah 3: Pantau peristiwa di sisi klien

Klien pihak ketiga memantau peristiwa message dan mengirimkan ticket terbaru ke iFrame terkait.

window.addEventListener('message', async (e) => {
  if (e?.data?.type === 'refreshToken') {
    const accessToken = await callApi()
    document.querySelector('#myIframe').contentWindow.postMessage(
      {
        // Nilai ini tetap sebagai applyAccessToken.
        type: 'applyAccessToken',
        // Tiket yang diperoleh dengan memanggil metode callApi.
        accessToken,
        // Tiket yang diperoleh dengan memanggil operasi CreateTicket.
        ticket: e.data.ticket,
      },
      '*'
    )
  }
})
Penting
  • Metode callApi() adalah metode kustom. Klien pihak ketiga menggunakan metode callApi() untuk memanggil API server pihak ketiga, yang kemudian memanggil operasi RefreshToken untuk mendapatkan ticket. Untuk informasi lebih lanjut tentang cara mengintegrasikan operasi RefreshToken ke dalam kode bisnis Anda, lihat Contoh Kode.

  • Saat Anda memanggil operasi RefreshToken untuk mendapatkan ticket, Anda harus menggunakan titik akhir Layanan Log Sederhana untuk wilayah Cina (Shanghai) atau Singapura. Setelah Anda mendapatkan ticket, Anda dapat menggunakan tiket tersebut tanpa memandang wilayah.

  • Operasi RefreshToken memerlukan parameter input berikut: ticket dan accessTokenExpirationTime. ticket menentukan tiket yang dihasilkan dengan memanggil operasi CreateTicket. accessTokenExpirationTime menentukan periode validitas tiket yang dihasilkan dengan memanggil operasi RefreshToken. Unit: detik. Nilai maksimum: 86.400. Nilai default: 86.400, yang setara dengan satu hari. Periode validitas tiket dapat diperpanjang hingga 30 hari. Operasi RefreshToken dipanggil sekali sehari sebelum tiket kedaluwarsa.

Contoh kode

Contoh kode berikut memberikan contoh tentang cara menggunakan operasi RefreshToken:

Java

  1. Tambahkan dependensi Maven.

    Buka file pom.xml di direktori root proyek Java Anda dan tambahkan kode berikut:

        <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. Hasilkan ticket.

    // File ini dihasilkan secara otomatis, jangan edit. Terima kasih.
    package com.aliyun.sample;
    
    import com.aliyun.sls20201230.Client;
    import com.aliyun.tea.*;
    
    public class Sample {
    
        /**
         * Gunakan ID AccessKey dan rahasia AccessKey Anda untuk menginisialisasi klien.
         * @return Client
         * @throws Exception
         */
        public static Client createClient() throws Exception {
            // Jika kode proyek bocor, pasangan AccessKey mungkin bocor dan keamanan semua sumber daya di akun Anda mungkin terganggu. Contoh kode berikut hanya untuk referensi.
            // Kami merekomendasikan agar Anda menggunakan token STS, yang memberikan keamanan lebih tinggi.
            com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
                    // Wajib. Pastikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID dikonfigurasi.
                    .setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
                    // Wajib. Pastikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_SECRET dikonfigurasi.
                    .setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
            // Untuk informasi lebih lanjut tentang titik akhir, lihat 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) {
                // Tangani pengecualian dengan hati-hati dalam skenario bisnis aktual dan jangan pernah abaikan pengecualian dalam proyek Anda. Dalam contoh ini, pesan kesalahan ditampilkan di konsol.
                // Tampilkan pesan kesalahan.
                System.out.println(error.getMessage());
                // Tampilkan informasi untuk pemecahan masalah.
                System.out.println(error.getData().get("Recommend"));
                com.aliyun.teautil.Common.assertAsString(error.message);
            } catch (Exception _error) {
                TeaException error = new TeaException(_error.getMessage(), _error);
                // Tangani pengecualian dengan hati-hati dalam skenario bisnis aktual dan jangan pernah abaikan pengecualian dalam proyek Anda. Dalam contoh ini, pesan kesalahan ditampilkan di konsol.
                // Tampilkan pesan kesalahan.
                System.out.println(error.getMessage());
                // Tampilkan informasi untuk pemecahan masalah.
                System.out.println(error.getData().get("Recommend"));
                com.aliyun.teautil.Common.assertAsString(error.message);
            }        
        }
    }
    

Python

# -*- coding: utf-8 -*-
# File ini dihasilkan secara otomatis, jangan edit. Terima kasih.
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:
        """
        Gunakan ID AccessKey dan rahasia AccessKey Anda untuk menginisialisasi klien.
        @return: Client
        @throws Exception
        """
        # Jika kode proyek bocor, pasangan AccessKey mungkin bocor dan keamanan semua sumber daya di akun Anda mungkin terganggu. Contoh kode berikut hanya untuk referensi.
        # Kami merekomendasikan agar Anda menggunakan token STS, yang memberikan keamanan lebih tinggi.
        config = open_api_models.Config(
            # Wajib. Pastikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID dikonfigurasi.
            access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
            # Wajib. Pastikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_SECRET dikonfigurasi.
            access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
        )
        # Untuk informasi lebih lanjut tentang titik akhir, lihat 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:
            # Jika Anda menyalin dan menjalankan kode sampel, tambahkan kode untuk menampilkan hasil pemanggilan API.
            client.refresh_token_with_options(refresh_token_request, headers, runtime)
        except Exception as error:
            # Tangani pengecualian dengan hati-hati dalam skenario bisnis aktual dan jangan pernah abaikan pengecualian dalam proyek Anda. Dalam contoh ini, pesan kesalahan ditampilkan di konsol.
            # Tampilkan pesan kesalahan.
            print(error.message)
            # Tampilkan informasi untuk pemecahan masalah.
            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:
            # Jika Anda menyalin dan menjalankan kode sampel, tambahkan kode untuk menampilkan hasil pemanggilan API.
            await client.refresh_token_with_options_async(refresh_token_request, headers, runtime)
        except Exception as error:
            # Tangani pengecualian dengan hati-hati dalam skenario bisnis aktual dan jangan pernah abaikan pengecualian dalam proyek Anda. Dalam contoh ini, pesan kesalahan ditampilkan di konsol.
            # Tampilkan pesan kesalahan.
            print(error.message)
            # Tampilkan informasi untuk pemecahan masalah.
            print(error.data.get("Recommend"))
            UtilClient.assert_as_string(error.message)


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