Skip to main content
LibreChat is joining ClickHouse to power the open-source Agentic Data Stack 🎉 Learn more
LibreChat

Auth0

Cấu hình Auth0 làm nhà cung cấp OpenID Connect cho LibreChat

Hướng dẫn này sẽ giúp bạn cấu hình Auth0 làm nhà cung cấp OpenID Connect cho LibreChat.

Tổng quan

Auth0 có thể được sử dụng làm nhà cung cấp OpenID Connect cho LibreChat. Khi sử dụng Auth0 với tính năng tái sử dụng token được bật (OPENID_REUSE_TOKENS=true), bạn phải cấu hình biến môi trường OPENID_AUDIENCE để ngăn ngừa các sự cố xác thực.

Điều kiện tiên quyết

  • Một tài khoản Auth0 với một tenant đang hoạt động
  • Quyền truy cập quản trị để tạo ứng dụng và API trong Auth0
  • LibreChat instance đã sẵn sàng để cấu hình

Các bước cấu hình

Bước 1: Tạo một ứng dụng Auth0

  1. Đi tới Auth0 DashboardApplicationsApplications
  2. Nhấp vào "Create Application"
  3. Cấu hình ứng dụng:
    • Tên: LibreChat (hoặc tên bạn ưu tiên)
    • Application Type: Chọn "Single Page Application"
  4. Nhấp vào "Create"

Bước 2: Cấu hình cài đặt ứng dụng

Yêu cầu HTTPS

Auth0 không cho phép các URL http://localhost trong các ứng dụng production. Để phát triển/thử nghiệm cục bộ, bạn sẽ cần sử dụng HTTPS. Bạn có thể sử dụng các dịch vụ như:

  • ngrok: ngrok http 3080 (cung cấp đường hầm HTTPS tới localhost)
  • Caddy: Máy chủ proxy HTTPS cục bộ
  • localtunnel: Tương tự như ngrok

Ví dụ với ngrok:

ngrok http 3080
# This will give you a URL like: https://abc123.ngrok.io
  1. Trong tab Settings của ứng dụng:
  2. Thiết lập Allowed Callback URLs:
    https://your-domain.ngrok.io/oauth/openid/callback
    (Sử dụng URL ngrok của bạn để kiểm thử, hoặc URL HTTPS production của bạn)
  3. Thiết lập Allowed Logout URLs (nếu sử dụng kết thúc phiên):
    https://your-domain.ngrok.io
  4. Thiết lập Allowed Web Origins:
    https://your-domain.ngrok.io
  5. Lưu các thay đổi

Bước 3: Tạo Auth0 API (Bắt buộc để sử dụng lại Token)

Quan trọng đối với việc tái sử dụng Token

Bước này là bắt buộc khi sử dụng OPENID_REUSE_TOKENS=true. Nếu không có nó, Auth0 sẽ trả về các opaque token không thể được xác thực bởi LibreChat, dẫn đến các vòng lặp làm mới vô hạn.

  1. Đi tới Auth0 DashboardApplicationsAPIs
  2. Nhấp vào "Create API"
  3. Cấu hình API:
    • Tên: LibreChat API (hoặc tên bạn ưu tiên)
    • Identifier: https://api.librechat.ai (hoặc định danh ưa thích của bạn)
      • Lưu ý: Đây chỉ là một định danh duy nhất, không phải là một URL thực tế. Nó không cần phải truy cập được.
      • Các mẫu phổ biến: https://api.yourdomain.com, https://librechat.yourdomain.com, v.v.
    • Thuật toán ký: RS256 (khuyên dùng)
  4. Nhấp vào "Create"

Bước 4: Cấu hình truy cập ngoại tuyến

  1. Đi tới Cài đặt API của bạnCài đặt truy cập
  2. Bật "Allow Offline Access"
  3. Lưu các thay đổi

Bước 5: Thu thập các giá trị cấu hình

Trong phần Basic Information của ứng dụng Auth0 của bạn, bạn sẽ tìm thấy:

  • Domain: Hiển thị dưới dạng dev-example.us.auth0.com (bạn sẽ cần thêm tiền tố https://)
  • Client ID: Một chuỗi ký tự chữ và số dài
  • Client Secret: Bị ẩn theo mặc định (nhấp để hiển thị)

Quan trọng

Domain hiển thị trong Auth0 không bao gồm tiền tố https://. Bạn phải thêm tiền tố này khi cấu hình OPENID_ISSUER.

Ví dụ: Nếu Auth0 hiển thị dev-abc123.us.auth0.com, hãy sử dụng https://dev-abc123.us.auth0.com

Bước 6: Cấu hình các biến môi trường của LibreChat

Thêm các biến môi trường sau vào tệp .env của bạn:

# OpenID Connect Configuration
# Domain from Basic Information (add https:// prefix)
OPENID_ISSUER=https://dev-abc123.us.auth0.com

# Client ID from Basic Information
OPENID_CLIENT_ID=your_long_alphanumeric_client_id

# Client Secret from Basic Information (click to reveal)
OPENID_CLIENT_SECRET=your_client_secret_from_basic_information

# Callback URL (must match what's configured in Auth0)
OPENID_CALLBACK_URL=/oauth/openid/callback

# Token Configuration
OPENID_REUSE_TOKENS=true
OPENID_SCOPE=openid profile email offline_access

# IMPORTANT: Your Auth0 API identifier (from Step 3)
OPENID_AUDIENCE=https://api.librechat.ai

# Security Settings (recommended)
OPENID_USE_PKCE=true

# Session Configuration (generate a secure random string)
OPENID_SESSION_SECRET=your-secure-session-secret-32-chars-or-more

# Maximum logout URL length before using logout_hint instead of id_token_hint (default: 2000)
# OPENID_MAX_LOGOUT_URL_LENGTH=2000

# Optional: Custom button appearance
OPENID_BUTTON_LABEL=Continue with Auth0
# OPENID_IMAGE_URL=https://path-to-auth0-logo.png

# If using ngrok for testing, also update:
# DOMAIN_CLIENT=https://your-domain.ngrok.io
# DOMAIN_SERVER=https://your-domain.ngrok.io

Hiểu về OPENID_AUDIENCE

Vấn đề

Khi sử dụng Auth0 với OPENID_REUSE_TOKENS=true:

  • Auth0 trả về opaque access tokens (định dạng JWE) theo mặc định
  • LibreChat yêu cầu signed JWT tokens (định dạng JWS) có thể được xác thực
  • Nếu không được cấu hình đúng cách, sự không khớp này sẽ gây ra lỗi xác thực và các vòng lặp làm mới vô hạn.

Giải pháp

Biến môi trường OPENID_AUDIENCE:

  • Phải được đặt thành định danh API Auth0 của bạn (được tạo ở Bước 3)
  • Buộc Auth0 cấp các access token JWT đã ký thay vì các token không minh bạch (opaque tokens)
  • Cho phép LibreChat xác thực token bằng endpoint JWKS của Auth0
  • Có thể chứa các đối tượng (audiences) được phân tách bằng dấu phẩy để xác thực JWT; các yêu cầu ủy quyền Auth0 sử dụng giá trị khác rỗng đầu tiên

Cách thức hoạt động

Khi OPENID_AUDIENCE được cấu hình:

  1. LibreChat bao gồm tham số audience trong các yêu cầu ủy quyền, sử dụng giá trị khác rỗng đầu tiên khi có nhiều audience được cấu hình và phân tách bằng dấu phẩy.
  2. Auth0 nhận diện đối tượng (audience) là một API đã đăng ký
  3. Auth0 phát hành các JWT access token có thể được xác thực
  4. LibreChat xác thực token thành công và quá trình xác thực hoạt động bình thường

Tham chiếu Biến Môi trường

KeyTypeDescriptionExample
OPENID_AUDIENCEstringĐịnh danh cho Auth0 API của bạn. Bắt buộc khi sử dụng OPENID_REUSE_TOKENS=true với Auth0 để ngăn chặn các vấn đề về opaque token. Chấp nhận các giá trị được phân tách bằng dấu phẩy để xác thực JWT; các yêu cầu ủy quyền sẽ sử dụng giá trị khác rỗng đầu tiên.OPENID_AUDIENCE=https://api.librechat.ai

Khắc phục sự cố

Vòng lặp làm mới vô hạn

Triệu chứng: Trang web liên tục tải lại sau khi nhấp vào "Continue with OpenID"

Giải pháp:

  1. Đảm bảo OPENID_AUDIENCE được đặt thành định danh API Auth0 của bạn
  2. Xác minh API đã được tạo trong Auth0 và quyền truy cập ngoại tuyến (offline access) đã được bật
  3. Kiểm tra để đảm bảo giá trị audience khớp chính xác

Lỗi Token không hợp lệ

Triệu chứng: Xác thực thất bại với các lỗi xác thực token

Giải pháp:

  1. Bật ghi nhật ký gỡ lỗi: DEBUG_OPENID_REQUESTS=true
  2. Xác minh rằng Auth0 đang trả về mã thông báo JWT (không phải mã thông báo mờ - opaque tokens)
  3. Kiểm tra xem endpoint JWKS có thể truy cập được không

Thiếu Refresh Token

Triệu chứng: Không có refresh token trong phản hồi xác thực

Giải pháp:

  1. Đảm bảo offline_access được bao gồm trong OPENID_SCOPE
  2. Xác minh "Allow Offline Access" đã được bật trong cài đặt API Auth0 của bạn

Các phương pháp tốt nhất

  1. Luôn sử dụng HTTPS - Auth0 yêu cầu HTTPS cho tất cả các URL callback
  2. Kiểm thử cục bộ - Sử dụng ngrok hoặc các dịch vụ tương tự để tạo đường truyền HTTPS tới localhost
  3. Bảo mật session secret của bạn - Sử dụng một giá trị ngẫu nhiên, mạnh cho OPENID_SESSION_SECRET
  4. Bật PKCE - Thiết lập OPENID_USE_PKCE=true để tăng cường bảo mật
  5. Hạn chế các URL callback - Chỉ cho phép tên miền thực tế của bạn trong cài đặt Auth0
  6. Theo dõi nhật ký - Sử dụng DEBUG_OPENID_REQUESTS=true trong quá trình thiết lập
  7. API Identifier - Hãy nhớ rằng đây chỉ là một định danh, không phải là một endpoint thực tế cần phải tồn tại

Tài nguyên bổ sung

Hướng dẫn này thế nào?