Token sementara adalah token autentikasi berumur pendek untuk mengakses Gemini API melalui WebSockets. Kredensial ini dirancang untuk meningkatkan keamanan saat Anda terhubung langsung dari perangkat pengguna ke API (implementasi klien ke server). Seperti kunci API standar, token sementara dapat diekstrak dari aplikasi sisi klien seperti browser web atau aplikasi seluler. Namun, karena token sementara cepat habis masa berlakunya dan dapat dibatasi, token ini secara signifikan mengurangi risiko keamanan di lingkungan produksi.
Cara kerja token sementara
Berikut cara kerja token sementara secara umum:
- Klien Anda (misalnya, aplikasi web) melakukan autentikasi dengan backend Anda.
- Backend Anda meminta token sementara dari layanan penyediaan Gemini API.
- Gemini API mengeluarkan token yang memiliki masa aktif singkat.
- Backend Anda mengirimkan token ke klien untuk koneksi WebSocket ke Live API. Anda dapat melakukannya dengan menukar kunci API Anda dengan token sementara.
- Kemudian, klien menggunakan token seolah-olah itu adalah kunci API.
Hal ini meningkatkan keamanan karena meskipun diekstrak, token hanya berlaku dalam waktu singkat, tidak seperti kunci API yang berlaku dalam waktu lama yang di-deploy di sisi klien. Karena klien mengirim data langsung ke Gemini, hal ini juga meningkatkan latensi dan menghindari backend Anda perlu memproksi data real-time.
Membuat token sementara
Berikut adalah contoh sederhana cara mendapatkan token sementara dari Gemini.
Secara default, Anda akan memiliki waktu 1 menit untuk memulai sesi Live API baru menggunakan token
dari permintaan ini (newSessionExpireTime
), dan 30 menit untuk mengirim pesan melalui
koneksi tersebut (expireTime
).
Python
import datetime
now = datetime.datetime.now(tz=datetime.timezone.utc)
client = genai.Client(
http_options={'api_version': 'v1alpha',}
)
token = client.auth_tokens.create(
config = {
'uses': 1, # The ephemeral token can only be used to start a single session
'expire_time': now + datetime.timedelta(minutes=30), # Default is 30 minutes in the future
# 'expire_time': '2025-05-17T00:00:00Z', # Accepts isoformat.
'new_session_expire_time': now + datetime.timedelta(minutes=1), # Default 1 minute in the future
'http_options': {'api_version': 'v1alpha'},
}
)
# You'll need to pass the value under token.name back to your client to use it
JavaScript
import { GoogleGenAI } from "@google/genai";
const client = new GoogleGenAI({});
const expireTime = new Date(Date.now() + 30 * 60 * 1000).toISOString();
const token: AuthToken = await client.authTokens.create({
config: {
uses: 1, // The default
expireTime: expireTime // Default is 30 mins
newSessionExpireTime: new Date(Date.now() + (1 * 60 * 1000)), // Default 1 minute in the future
httpOptions: {apiVersion: 'v1alpha'},
},
});
Untuk batasan nilai expireTime
, default, dan spesifikasi kolom lainnya, lihat
referensi API.
Dalam jangka waktu expireTime
, Anda harus
sessionResumption
untuk
menghubungkan kembali panggilan setiap 10 menit (hal ini dapat dilakukan dengan token yang sama meskipun
uses: 1
).
Anda juga dapat mengunci token sementara ke serangkaian konfigurasi. Hal ini mungkin berguna untuk lebih meningkatkan keamanan aplikasi Anda dan menyimpan petunjuk sistem di sisi server.
Python
client = genai.Client(
http_options={'api_version': 'v1alpha',}
)
token = client.auth_tokens.create(
config = {
'uses': 1,
'live_connect_constraints': {
'model': 'gemini-2.0-flash-live-001',
'config': {
'session_resumption':{},
'temperature':0.7,
'response_modalities':['TEXT']
}
},
'http_options': {'api_version': 'v1alpha'},
}
)
# You'll need to pass the value under token.name back to your client to use it
JavaScript
import { GoogleGenAI } from "@google/genai";
const client = new GoogleGenAI({});
const expireTime = new Date(Date.now() + 30 * 60 * 1000).toISOString();
const token = await client.authTokens.create({
config: {
uses: 1, // The default
expireTime: expireTime,
liveConnectConstraints: {
model: 'gemini-2.0-flash-live-001',
config: {
sessionResumption: {},
temperature: 0.7,
responseModalities: ['TEXT']
}
},
httpOptions: {
apiVersion: 'v1alpha'
}
}
});
// You'll need to pass the value under token.name back to your client to use it
Anda juga dapat mengunci subset kolom, lihat dokumentasi SDK untuk mengetahui info selengkapnya.
Menghubungkan ke Live API dengan token sementara
Setelah memiliki token sementara, Anda dapat menggunakannya seolah-olah itu adalah kunci API (tetapi
ingat, token tersebut hanya berfungsi untuk live API, dan hanya dengan API versi v1alpha
).
Perhatikan bahwa penggunaan token sementara hanya menambah nilai saat men-deploy aplikasi yang mengikuti pendekatan implementasi client-to-server.
JavaScript
import { GoogleGenAI, Modality } from '@google/genai';
// Use the token generated in the "Create an ephemeral token" section here
const ai = new GoogleGenAI({
apiKey: token.name
});
const model = 'gemini-2.0-flash-live-001';
const config = { responseModalities: [Modality.TEXT] };
async function main() {
const session = await ai.live.connect({
model: model,
config: config,
callbacks: { ... },
});
// Send content...
session.close();
}
main();
Lihat Mulai menggunakan Live API untuk contoh lainnya.
Praktik terbaik
- Tetapkan durasi habis masa berlaku yang singkat menggunakan parameter
expire_time
. - Masa berlaku token akan berakhir, sehingga memerlukan inisiasi ulang proses penyediaan.
- Verifikasi autentikasi aman untuk backend Anda sendiri. Token sementara hanya akan seaman metode autentikasi backend Anda.
- Secara umum, hindari penggunaan token sementara untuk koneksi backend-ke-Gemini, karena jalur ini biasanya dianggap aman.
Batasan
Token sementara hanya kompatibel dengan Live API untuk saat ini.
Langkah berikutnya
- Baca referensi Live API tentang token sementara untuk mengetahui informasi selengkapnya.