Penggunaan Kembali Token OpenID Connect
Cara mengonfigurasi penggunaan ulang token OpenID Connect dengan LibreChat
LibreChat mendukung penggunaan kembali token akses dan refresh yang diterbitkan oleh penyedia OpenID Connect Anda (seperti Azure Entra ID atau Auth0) untuk mengelola status autentikasi pengguna. Saat fitur ini aktif, token refresh yang diberikan kepada pengguna sebagai cookie diterbitkan oleh penyedia OpenID Anda alih-alih LibreChat, yang memungkinkan server LibreChat untuk menyegarkannya dan meminta token akses dari penyedia Anda.
Prasyarat
- Penyedia OpenID Connect yang telah dikonfigurasi (seperti Azure Entra ID, Auth0, dll.)
- Pengaturan dasar OpenID Connect telah selesai
Langkah-langkah Konfigurasi
- Atur
OPENID_REUSE_TOKENS=truedi dalam variabel lingkungan Anda.
Konfigurasi Spesifik Provider
Konfigurasi Auth0
Penting untuk Auth0
Saat menggunakan Auth0 dengan penggunaan kembali token (token reuse), Anda wajib mengonfigurasi variabel lingkungan OPENID_AUDIENCE. Tanpanya, Auth0 akan mengembalikan token buram (opaque tokens) yang tidak dapat divalidasi oleh LibreChat, yang menyebabkan perulangan penyegaran (refresh loops) tanpa henti.
Untuk Auth0, Anda perlu:
-
Buat API di Auth0 (diperlukan untuk token akses JWT):
- Buka Auth0 Dashboard → Applications → APIs
- Klik "Create API"
- Tetapkan Identifier (contoh:
https://api.librechat.com) - Aktifkan "Allow Offline Access" di pengaturan API
-
Atur variabel lingkungan yang diperlukan:
# Required for Auth0 OPENID_AUDIENCE=https://api.librechat.com # Your API identifier from Auth0 OPENID_SCOPE=openid profile email offline_access
Untuk konfigurasi Auth0 yang mendetail, lihat: Auth0 OpenID Connect Configuration
Konfigurasi Azure Entra ID
- Konfigurasikan penyedia OpenID Anda (menggunakan Azure Entra ID sebagai contoh):
- Buka Azure Portal dan navigasikan ke pendaftaran aplikasi Anda
- Klik "Expose API" di menu sebelah kiri
- Klik "Add" di samping "Application ID URI"
- Masukkan API URI Anda (contoh: "api://librechat") dan simpan
- Buat cakupan API:
- Di bagian "Expose API", klik "Add a scope"
- Konfigurasikan cakupan dengan izin yang sesuai
- Simpan konfigurasi cakupan
- Konfigurasikan izin API:
- Buka "API permissions" di menu sebelah kiri
- Klik "Add a permission"
- Di bawah "APIs my organization uses", cari aplikasi Anda
- Pilih "Delegated permissions" dan pilih cakupan yang sesuai (contohnya, "access_user")
-
Atur scope yang diperlukan di lingkungan Anda:
OPENID_SCOPE=api://librechat/.default openid profile email offline_accessCatatan: Scope
offline_accessdiperlukan untuk mendapatkan refresh token agar dapat digunakan kembali. -
Berikan persetujuan admin:
- Buka Enterprise Applications di Azure Portal
- Temukan aplikasi LibreChat Anda
- Navigasikan ke Security > Permissions
- Klik "Grant admin consent"
- Terima izin yang diminta di dalam popup
- Bersihkan cache LibreChat dan mulai ulang layanan tersebut.
Integrasi Microsoft Graph API
Saat menggunakan Azure Entra ID dengan penggunaan kembali token (token reuse), Anda juga dapat mengaktifkan integrasi Microsoft Graph API untuk kemampuan pencarian orang dan grup yang lebih baik. Lihat Integrasi Microsoft Graph API untuk detail lebih lanjut.
Environment Variables
# OpenID Token Reuse Configuration
OPENID_REUSE_TOKENS=true
OPENID_SCOPE=api://librechat/.default openid profile email offline_access
OPENID_REUSE_MAX_SESSION_AGE_MS=900000 # 15 minutes in milliseconds
# Required for Auth0 (use your API identifier)
# OPENID_AUDIENCE=https://api.librechat.com
# Caching Configuration
OPENID_JWKS_URL_CACHE_ENABLED=true
OPENID_JWKS_URL_CACHE_TIME=600000 # 10 minutes in milliseconds
# Azure-specific Configuration
OPENID_ON_BEHALF_FLOW_FOR_USERINFO_REQUIRED=true
OPENID_ON_BEHALF_FLOW_USERINFO_SCOPE=user.read
# Logout Configuration
OPENID_USE_END_SESSION_ENDPOINT=true
# Maximum logout URL length before using logout_hint instead of id_token_hint (default: 2000)
# OPENID_MAX_LOGOUT_URL_LENGTH=2000Opsi Konfigurasi Tambahan
OPENID_AUDIENCE: Nilai audience untuk validasi JWT dan permintaan otorisasi. Diperlukan untuk Auth0 agar menerima token akses JWT alih-alih token buram (opaque tokens). Nilai yang dipisahkan koma diterima untuk validasi JWT; permintaan otorisasi menggunakan nilai pertama yang tidak kosong.OPENID_REUSE_MAX_SESSION_AGE_MS: Usia maksimum token sesi OpenID yang digunakan kembali sebelum LibreChat memaksa penyegaran IdP (default: 900000 ms / 15 menit). Menerima ekspresi aritmatika seperti60 * 60 * 24 * 1000. Tingkatkan nilainya mendekati masa pakai access-token IdP Anda jika penyedia Anda mencabut access token sebelumnya setiap kali dilakukan penyegaran.OPENID_JWKS_URL_CACHE_ENABLED: Mengaktifkan caching hasil verifikasi kunci penandatanganan untuk mencegah permintaan HTTP yang berlebihan ke endpoint JWKSOPENID_JWKS_URL_CACHE_TIME: Durasi cache dalam milidetik (default: 600000 ms / 10 menit)OPENID_ON_BEHALF_FLOW_FOR_USERINFO_REQUIRED: Mengaktifkan alur on-behalf-of untuk info pengguna (khusus Azure)OPENID_ON_BEHALF_FLOW_USERINFO_SCOPE: Scope untuk info pengguna dalam alur on-behalf-of (khusus Azure)OPENID_USE_END_SESSION_ENDPOINT: Mengaktifkan penggunaan endpoint end session untuk logoutOPENID_MAX_LOGOUT_URL_LENGTH: Panjang URL maksimum sebelum menggunakanlogout_hintalih-alihid_token_hintuntuk mencegah kesalahan URI terlalu panjang (default: 2000)
Pertimbangan Keamanan
- Pastikan penyimpanan dan penanganan token dilakukan dengan benar
- Implementasikan mekanisme penyegaran token yang sesuai
- Pantau penggunaan token dan terapkan pembatasan laju (rate limiting) jika diperlukan
- Lakukan rotasi client secrets secara berkala
- Gunakan pengaturan cookie yang aman untuk penyimpanan token
Pemecahan Masalah
Jika Anda mengalami masalah dengan penggunaan ulang token:
- Verifikasi semua scope yang diperlukan telah dikonfigurasi dengan benar
- Pastikan persetujuan admin telah diberikan
- Pastikan izin API telah diatur dengan benar
- Verifikasi bahwa cache token berfungsi sebagaimana mestinya
- Periksa log aplikasi untuk melihat apakah ada kesalahan autentikasi
- Aktifkan pencatatan header permintaan OpenID secara mendetail dengan mengatur
DEBUG_OPENID_REQUESTS=truedi variabel lingkungan Anda untuk melihat header permintaan selain URL (dengan data sensitif yang disamarkan).
Bagaimana panduan ini?