Simple Log Serviceを使用すると、Simple Log Serviceコンソールのクエリおよび分析結果のページとダッシュボードページを他のユーザーと共有し、コンソールページをサードパーティのシステムに埋め込むことができます。 このようにして、他のユーザーはパスワードなしおよびログオンなしモードでログを表示できます。 共有ページのURLは、パスワードフリーURLおよびログオンフリーURLと呼ばれます。 CreateTicket操作を呼び出してチケットを取得し、チケットと共有するコンソールページのURLに基づいて、パスワードなしでログオンなしのURLを生成できます。 CreateTicket操作によって返されたチケットは、短期間有効です。 その結果、チケットに基づいて生成されるパスワード不要でログオン不要なURLの有効期間も短くなります。 有効期間を延長する場合は、RefreshToken操作を呼び出すことができます。 このトピックでは、パスワードなしおよびログオンなしのURLの有効期間を延長する方法について説明します。
仕組み
前提条件
パスワードなしでログオンなしのURLが生成されます。 詳細については、「コンソールページの埋め込みとログデータの共有 (新バージョン) 」をご参照ください。
手順
手順1: RAMユーザーに必要な権限を付与する
Alibaba Cloudアカウントを使用している場合は、この手順をスキップして手順2に進みます。
パスワードなしおよびログオンなしのURLを生成するRAMユーザーを使用して、Resource Access Management (RAM) コンソールにログインします。
RefreshToken操作を呼び出す権限をRAMユーザーに付与します。 詳細については、「RAMユーザーへの権限の付与」および「カスタムポリシーの作成」をご参照ください。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "log:RefreshToken", "Resource": "acs:log:*:*:ticket/*" } ] }
手順2: パスワードなしおよびログオンなしのURLにパラメータを追加する
パスワードなしおよびログオンなしのURLとsupportRefreshToken
パラメーターを連結します。 supportRefreshTokenパラメーターは、サードパーティサーバーがRefreshToken操作をサポートするかどうかを指定します。 supportRefreshTokenパラメーターをtrue
に設定して、パスワードなしおよびログオンなしのURLの有効期間を延長します。
https://sls.console.aliyun.com/lognext/project/<Project name>/dashboard/<Dashboard ID>?sls_ticket=eyJ***************.eyJ******************.KUT****************&supportRefreshToken=true&isShare=true&hideTopbar=true&hideSidebar=true&ignoreTabLocalStorage=true
手順3: クライアント側でイベントを監視
サードパーティのクライアントは、message
イベントを監視し、最新のチケット
を関連するiFrame
に送信します。
window.addEventListener('message', async (e) => {
if (e?.data?.type === 'refreshToken') {
const accessToken = await callApi()
document.querySelector('#myIframe').contentWindow.postMessage(
{
// The value is fixed as applyAccessToken.
type: 'applyAccessToken',
// The ticket that is obtained by calling the callApi method.
accessToken,
// The ticket that is obtained by calling the CreateTicket operation.
ticket: e.data.ticket,
},
'*'
)
}
})
callApi()
メソッドはカスタムメソッドです。 サードパーティクライアントは、callApi() メソッドを使用してサードパーティサーバーのAPIを呼び出し、RefreshToken操作を呼び出してチケット
を取得します。 RefreshToken操作をビジネスコードに統合する方法の詳細については、「サンプルコード」をご参照ください。RefreshToken操作を呼び出して
チケット
を取得する場合、中国 (上海) またはシンガポールリージョンのSimple Log Serviceエンドポイントを使用する必要があります。チケット
を取得すると、地域に関係なくチケットを使用できます。RefreshToken操作には、次の入力パラメーターが必要です。ticketとaccessTokenExpirationTime。
ticket
は、CreateTicket操作を呼び出して生成されるチケットを指定します。accessTokenExpirationTime
は、RefreshToken操作の呼び出しによって生成されるチケットの有効期間を指定します。 単位は秒です。 最大値: 86400。 デフォルト値: 86400。これは1日に相当します。 チケットの有効期間は最大30日まで延長できます。 RefreshToken操作は、チケットの有効期限が切れる前に1日1回呼び出されます。
サンプルコード
次のサンプルコードは、RefreshToken操作の使用例を示しています。
Java
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>
チケット
を生成します。// 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 { /** * Use your AccessKey ID and AccessKey secret to initialize a client. * @return Client * @throws Exception */ public static Client createClient() throws Exception { // If the project code is leaked, the AccessKey pair may be leaked and the security of all resources in your account may be compromised. The following sample code is provided only for reference. // We recommend that you use Security Token Service (STS) tokens, which provide higher security. com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config() // Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is configured. .setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")) // Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is configured. .setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")); // For more information about endpoints, see 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) { // Handle exceptions with caution in actual business scenarios and never ignore exceptions in your project. In this example, error messages are displayed in the console. // Display an error message. System.out.println(error.getMessage()); // Display information for troubleshooting. System.out.println(error.getData().get("Recommend")); com.aliyun.teautil.Common.assertAsString(error.message); } catch (Exception _error) { TeaException error = new TeaException(_error.getMessage(), _error); // Handle exceptions with caution in actual business scenarios and never ignore exceptions in your project. In this example, error messages are displayed in the console. // Display an error message. System.out.println(error.getMessage()); // Display information for troubleshooting. 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:
"""
Use your AccessKey ID and AccessKey secret to initialize a client.
@return: Client
@throws Exception
"""
# If the project code is leaked, the AccessKey pair may be leaked and the security of all resources in your account may be compromised. The following sample code is provided only for reference.
# We recommend that you use STS tokens, which provide higher security.
config = open_api_models.Config(
# Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is configured.
access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
# Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is configured.
access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
)
# For more information about endpoints, see 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:
# If you copy and run the sample code, add code to display the API call results.
client.refresh_token_with_options(refresh_token_request, headers, runtime)
except Exception as error:
# Handle exceptions with caution in actual business scenarios and never ignore exceptions in your project. In this example, error messages are displayed in the console.
# Display an error message.
print(error.message)
# Display information for troubleshooting.
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:
# If you copy and run the sample code, add code to display the API call results.
await client.refresh_token_with_options_async(refresh_token_request, headers, runtime)
except Exception as error:
# Handle exceptions with caution in actual business scenarios and never ignore exceptions in your project. In this example, error messages are displayed in the console.
# Display an error message.
print(error.message)
# Display information for troubleshooting.
print(error.data.get("Recommend"))
UtilClient.assert_as_string(error.message)
if __name__ == '__main__':
Sample.main(sys.argv[1:])