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.
Masuk ke Konsol Resource Access Management (RAM) menggunakan pengguna RAM yang menghasilkan URL tanpa kata sandi dan tanpa login.
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=trueLangkah 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,
},
'*'
)
}
})
Metode
callApi()adalah metode kustom. Klien pihak ketiga menggunakan metode callApi() untuk memanggil API server pihak ketiga, yang kemudian memanggil operasi RefreshToken untuk mendapatkanticket. 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 mendapatkanticket, Anda dapat menggunakan tiket tersebut tanpa memandang wilayah.Operasi RefreshToken memerlukan parameter input berikut: ticket dan accessTokenExpirationTime.
ticketmenentukan tiket yang dihasilkan dengan memanggil operasi CreateTicket.accessTokenExpirationTimemenentukan 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
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>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:])