すべてのプロダクト
Search
ドキュメントセンター

Intelligent Media Services:ARTC 認証トークンの生成

最終更新日:Nov 09, 2025

このトピックでは、通話を開始するために必要な Alibaba Real-Time Communication (ARTC) 認証トークンを生成する方法について説明します。

機能概要

AICallKit SDK は、エージェントコールを直接開始するためのクライアント側 API を提供します。この API には認証トークンが必要です。アプリケーションサーバーは、ARTC 認証トークンを生成するための API を提供する必要があります。これにより、クライアントは通話を開始する前に API からトークンを取得できます。

手順

ARTC トークンを生成するには、リアルタイム音声・映像アプリケーションの AppId と AppKey を取得します。

  1. Intelligent Media Service コンソールに移動します。作成したエージェントをクリックして、その製品ページを開きます。

    image

  2. [RTC AppID] をクリックします。ApsaraVideo Live コンソールに移動して、AppId と AppKey を取得します。

    image

  3. AppId と AppKey を使用して ARTC 認証トークンを生成します。トークンは次のように計算されます。

    // 1. 次のフィールドを連結します: AppID+AppKey+ChannelID+UserID+Nonce+Timestamp
    // 2. 連結された文字列に sha256 関数を使用してトークンを生成します。
    token = sha256(AppID+AppKey+ChannelID+UserID+Nonce+Timestamp)
    // 例:
    AppID = "abc",AppKey="abckey",ChannelID="abcChannel",UserID="abcUser",Nonce="",Timestamp=1699423634
    token = sha256("abcabckeyabcChannelabcUser1699423634") = "3c9ee8d9f8734f0b7560ed8022a0590659113955819724fc9345ab8eedf84f31"

    フィールド

    説明

    AppID

    コンソールでアプリケーションを作成した後に自動的に生成される ARTC アプリケーション ID とキー。詳細については、「開発パラメーターの取得」をご参照ください。

    AppKey

    ChannelID

    カスタムチャネル ID。文字列である必要があり、数字、文字、ハイフン (-)、アンダースコア (_) を含めることができ、最大長は 64 文字です。

    同じセッションのすべての参加者 (ストリーマーと共同ストリーマー) は、同じ ChannelID を使用する必要があります。

    UserId

    カスタムユーザー ID。文字列である必要があり、数字、文字、ハイフン (-)、アンダースコア (_) を含めることができ、最大長は 64 文字です。

    Nonce

    nonce 文字列。このフィールドは空のままにすることをお勧めします。

    Timestamp

    トークンの有効期限タイムスタンプ (秒単位)。24 時間に設定することをお勧めします。そのためには、現在の UNIX タイムスタンプに 86400 (24 × 60 × 60) を追加します。

    • サーバーでトークンを生成する: 次のコードは、サーバーでトークンを生成する方法の例を示しています。

      Java
      package com.example;
      
      import java.nio.charset.StandardCharsets;
      import java.security.MessageDigest;
      import java.security.NoSuchAlgorithmException;
      import java.util.Base64;
      import java.util.Calendar;
      import org.json.JSONObject;
      
      public class App {
      
          public static String createBase64Token(String appid, String appkey, String channelid, String userid) {
              // 有効期限のタイムスタンプを計算します (現在から 24 時間後)
              Calendar calendar = Calendar.getInstance();
              calendar.add(Calendar.HOUR_OF_DAY, 24);
              long timestamp = calendar.getTimeInMillis() / 1000;
      
              // 文字列を連結します
              String stringBuilder = appid + appkey + channelid + userid + timestamp;
      
              // SHA-256 ハッシュを計算します
              String token = sha256(stringBuilder);
      
              // JSON オブジェクトを作成します
              JSONObject base64tokenJson = new JSONObject();
              base64tokenJson.put("appid", appid);
              base64tokenJson.put("channelid", channelid);
              base64tokenJson.put("userid", userid);
              base64tokenJson.put("nonce", "");
              base64tokenJson.put("timestamp", timestamp);
              base64tokenJson.put("token", token);
      
              // JSON オブジェクトを文字列に変換し、Base64 でエンコードします
              String jsonStr = base64tokenJson.toString();
              String base64token = Base64.getEncoder().encodeToString(jsonStr.getBytes(StandardCharsets.UTF_8));
              return base64token;
          }
      
          private static String sha256(String input) {
              try {
                  MessageDigest digest = MessageDigest.getInstance("SHA-256");
                  byte[] hash = digest.digest(input.getBytes(StandardCharsets.UTF_8));
                  StringBuilder hexString = new StringBuilder();
                  for (byte b : hash) {
                      String hex = Integer.toHexString(0xff & b);
                      if (hex.length() == 1)
                          hexString.append('0');
                      hexString.append(hex);
                  }
                  return hexString.toString();
              } catch (NoSuchAlgorithmException e) {
                  throw new RuntimeException(e);
              }
          }
      
          public static void main(String[] args) {
              String appid = "your_appid";
              String appkey = "your_appkey";
              String channel_id = "your_channel_id";
              String user_id = "your_user_id";
      
              String base64token = createBase64Token(appid, appkey, channel_id, user_id);
              System.out.println("Base64 Token: " + base64token);
          }
      }
      
      Python
      #!/usr/bin/env python
      # -*- coding: UTF-8 -*-
      
      import hashlib
      import datetime
      import time
      import base64
      import json
      
      def create_base64_token(app_id, app_key, channel_id, user_id):
          expire = datetime.datetime.now() + datetime.timedelta(days=1)
          timestamp = int(time.mktime(expire.timetuple()))
          h = hashlib.sha256()
          h.update(str(app_id).encode('utf-8'))
          h.update(str(app_key).encode('utf-8'))
          h.update(str(channel_id).encode('utf-8'))
          h.update(str(user_id).encode('utf-8'))
          h.update(str(timestamp).encode('utf-8'))
          token = h.hexdigest()
      
          jsonToken = {'appid': str(app_id),
                       'channelid': str(channel_id),
                       'userid':str(user_id),
                       'nonce':'',
                       'timestamp':timestamp,
                       'token':str(token)
                      }
          base64Token = base64.b64encode(json.dumps(jsonToken).encode())
      
          return base64Token
      
      def main():
          app_id = 'your_appid'
          app_key = 'your_appkey'
          channel_id = 'your_channel_id'
          user_id = 'your_user_id'
      
          base64Token = create_base64_token(app_id, app_key, channel_id, user_id)
          
          print(base64Token)
      
      if __name__ == '__main__':
          main()
      Go
      package main
      
      import (
      	"crypto/sha256"
      	"encoding/base64"
      	"encoding/hex"
      	"encoding/json"
      	"fmt"
      	"time"
      )
      
      func createBase64Token(appid, appkey, channelID, userID string) (string, error) {
      	// 有効期限のタイムスタンプを計算します (現在から 24 時間後)
      	timestamp := time.Now().Add(24 * time.Hour).Unix()
      
      	// 文字列を連結します
      	stringBuilder := appid + appkey + channelID + userID + fmt.Sprintf("%d", timestamp)
      
      	// SHA-256 ハッシュを計算します
      	hasher := sha256.New()
      	hasher.Write([]byte(stringBuilder))
      	token := hasher.Sum(nil)
      
      	// encoding/hex を使用してハッシュを 16 進文字列に変換します
      	tokenHex := hex.EncodeToString(token)
      
      	// JSON オブジェクトを作成します
      	tokenJSON := map[string]interface{}{
      		"appid":     appid,
      		"channelid": channelID,
      		"userid":    userID,
      		"nonce":     "",
      		"timestamp": timestamp,
      		"token":     tokenHex,
      	}
      
      	// JSON オブジェクトを文字列に変換し、Base64 でエンコードします
      	jsonBytes, err := json.Marshal(tokenJSON)
      	if err != nil {
      		return "", err
      	}
      	base64Token := base64.StdEncoding.EncodeToString(jsonBytes)
      
      	return base64Token, nil
      }
      
      func main() {
      	appid := "your_appid"
      	appkey := "your_appkey"
      	channelID := "your_channel_id"
      	userID := "your_user_id"
      
      	token, err := createBase64Token(appid, appkey, channelID, userID)
      	if err != nil {
      		fmt.Println("Error creating token:", err)
      		return
      	}
      	fmt.Println("Base64 Token:", token)
      }
    • クライアントにトークンを埋め込む: 開発中にアプリケーションサーバーで ARTC トークンを生成できない場合は、クライアントでローカルにトークンを発行できます。このメソッドでは、ARTC AppId と AppKey をクライアントに埋め込む必要があります。埋め込みトークンを生成するには、計算に必要な 5 つのパラメーター (AppID、ChannelID、Nonce、UserID、Timestamp) を含む JSON オブジェクトを作成します。次に、JSON オブジェクトを Base64 でエンコードします。生成された Base64 トークンを文字列としてアプリケーションに渡します。アプリケーションは、Base64 トークンを ARTC SDK に送信し、トラブルシューティングのために UserName フィールドを含めます。

      重要

      このメソッドは、AppKey などの機密情報をクライアントに埋め込みます。このため、テストおよび開発にのみ適しています。オンラインリリースにはこのメソッドを使用しないでください。AppKey が盗まれる可能性があり、セキュリティリスクが生じます。