全部产品
Search
文档中心

Intelligent Media Services:Hasilkan token otentikasi ARTC

更新时间:Nov 11, 2025

Topik ini menjelaskan cara menghasilkan token otentikasi Alibaba Real-Time Communication (ARTC) yang diperlukan untuk memulai panggilan.

Ikhtisar fungsi

SDK AICallKit menyediakan API sisi klien untuk langsung memulai panggilan agen. API tersebut memerlukan token otentikasi, sehingga server aplikasi Anda harus menyediakan API guna menghasilkan token otentikasi ARTC. Dengan demikian, klien dapat mengambil token dari API tersebut sebelum memulai panggilan.

Langkah-langkah

Untuk menghasilkan token ARTC, peroleh AppId dan AppKey dari aplikasi ApsaraVideo Real-time Communication Anda.

  1. Buka Konsol Intelligent Media Service. Klik agen yang telah Anda buat untuk membuka halaman produknya.

    image

  2. Klik RTC AppID. Buka Konsol ApsaraVideo Live untuk memperoleh AppId dan AppKey.

    image

  3. Hasilkan token otentikasi ARTC menggunakan AppId dan AppKey. Token dihitung sebagai berikut.

    // 1. Gabungkan bidang-bidang berikut: AppID+AppKey+ChannelID+UserID+Nonce+Timestamp
    // 2. Gunakan fungsi sha256 pada string yang digabungkan untuk menghasilkan token.
    token = sha256(AppID+AppKey+ChannelID+UserID+Nonce+Timestamp)
    // Contoh:
    AppID = "abc",AppKey="abckey",ChannelID="abcChannel",UserID="abcUser",Nonce="",Timestamp=1699423634
    token = sha256("abcabckeyabcChannelabcUser1699423634") = "3c9ee8d9f8734f0b7560ed8022a0590659113955819724fc9345ab8eedf84f31"

    Field

    Description

    AppID

    ID dan kunci aplikasi ARTC yang dihasilkan secara otomatis setelah Anda membuat aplikasi di konsol. Untuk informasi selengkapnya, lihat Peroleh parameter pengembangan.

    AppKey

    ChannelID

    ID saluran kustom. ID ini harus berupa string dan dapat berisi angka, huruf, tanda hubung (-), dan garis bawah (_), dengan panjang maksimum 64 karakter.

    Semua peserta dalam sesi yang sama (streamer dan co-streamer) harus menggunakan ChannelID yang sama.

    UserId

    ID pengguna kustom. ID ini harus berupa string dan dapat berisi angka, huruf, tanda hubung (-), dan garis bawah (_), dengan panjang maksimum 64 karakter.

    Nonce

    String nonce. Kami menyarankan agar bidang ini dikosongkan.

    Timestamp

    Stempel waktu kedaluwarsa token, dalam satuan detik. Kami menyarankan menyetelnya menjadi 24 jam. Untuk melakukannya, tambahkan 86400 (24 × 60 × 60) ke stempel waktu UNIX saat ini.

    • Hasilkan token di server: Kode berikut memberikan contoh cara menghasilkan token di server:

      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) {
              // Hitung stempel waktu kedaluwarsa (24 jam dari sekarang)
              Calendar calendar = Calendar.getInstance();
              calendar.add(Calendar.HOUR_OF_DAY, 24);
              long timestamp = calendar.getTimeInMillis() / 1000;
      
              // Gabungkan string
              String stringBuilder = appid + appkey + channelid + userid + timestamp;
      
              // Hitung hash SHA-256
              String token = sha256(stringBuilder);
      
              // Buat objek 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);
      
              // Konversi objek JSON menjadi string dan enkode dalam 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) {
      	// Hitung stempel waktu kedaluwarsa (24 jam dari sekarang)
      	timestamp := time.Now().Add(24 * time.Hour).Unix()
      
      	// Gabungkan string
      	stringBuilder := appid + appkey + channelID + userID + fmt.Sprintf("%d", timestamp)
      
      	// Hitung hash SHA-256
      	hasher := sha256.New()
      	hasher.Write([]byte(stringBuilder))
      	token := hasher.Sum(nil)
      
      	// Konversi hash menjadi string heksadesimal menggunakan encoding/hex
      	tokenHex := hex.EncodeToString(token)
      
      	// Buat objek JSON
      	tokenJSON := map[string]interface{}{
      		"appid":     appid,
      		"channelid": channelID,
      		"userid":    userID,
      		"nonce":     "",
      		"timestamp": timestamp,
      		"token":     tokenHex,
      	}
      
      	// Konversi objek JSON menjadi string dan enkode dalam 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)
      }
    • Sematkan token di klien: Jika Anda tidak dapat menghasilkan token ARTC di server aplikasi selama pengembangan, Anda dapat membuat token secara lokal di klien. Metode ini mengharuskan Anda menyematkan AppId dan AppKey ARTC di klien. Untuk menghasilkan token yang disematkan, buat objek JSON yang berisi lima parameter yang diperlukan untuk perhitungan: AppID, ChannelID, Nonce, UserID, dan Timestamp. Selanjutnya, enkode objek JSON tersebut dalam Base64 dan berikan string token Base64 yang dihasilkan ke aplikasi Anda. Aplikasi kemudian mengirimkan token Base64 tersebut ke SDK ARTC serta menyertakan bidang UserName untuk keperluan pemecahan masalah.

      Penting

      Metode ini menyematkan informasi sensitif, seperti AppKey, di klien Anda. Oleh karena itu, metode ini hanya cocok untuk pengujian dan pengembangan. Jangan gunakan metode ini untuk rilis online. Melakukannya menciptakan risiko keamanan karena AppKey Anda dapat dicuri.