Skip to main content

基于JWT的认证

使用JWT对代理中的管理员/项目进行认证。

info

✨ 基于JWT的认证从LiteLLM企业版的$250/月起

企业定价

联系我们获取免费试用

使用方法

第一步:设置代理

  • JWT_PUBLIC_KEY_URL:这是你的OpenID提供者的公钥端点。通常是{openid-provider-base-url}/.well-known/openid-configuration/jwks。对于Keycloak,它是{keycloak_base_url}/realms/{your-realm}/protocol/openid-connect/certs
  • JWT_AUDIENCE:这是用于解码JWT的受众。如果未设置,解码步骤将不会验证受众。
export JWT_PUBLIC_KEY_URL="" # "https://demo.duendesoftware.com/.well-known/openid-configuration/jwks"
  • enable_jwt_auth在你的配置中。这将告诉代理检查令牌是否为JWT令牌。
general_settings:
master_key: sk-1234
enable_jwt_auth: True

model_list:
- model_name: azure-gpt-3.5
litellm_params:
model: azure/<your-deployment-name>
api_base: os.environ/AZURE_API_BASE
api_key: os.environ/AZURE_API_KEY
api_version: "2023-07-01-preview"

第二步:创建带有范围的JWT

在你的OpenID提供者(例如Keycloak)中创建一个名为litellm_proxy_admin的客户端范围。

在生成JWT时,授予你的用户litellm_proxy_admin范围。

curl --location 'https://demo.duendesoftware.com/connect/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'client_id={CLIENT_ID}' \
--data-urlencode 'client_secret={CLIENT_SECRET}' \
--data-urlencode 'username=test-{USERNAME}' \
--data-urlencode 'password={USER_PASSWORD}' \
--data-urlencode 'grant_type=password' \
--data-urlencode 'scope=litellm_proxy_admin' # 👈 授予此范围

在你的OpenID提供者(例如Keycloak)上为你的项目创建一个JWT。

curl --location 'https://demo.duendesoftware.com/connect/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'client_id={CLIENT_ID}' \ # 👈 项目ID
--data-urlencode 'client_secret={CLIENT_SECRET}' \
--data-urlencode 'grant_type=client_credential' \

第三步:测试你的JWT

curl --location '{proxy_base_url}/key/generate' \
--header 'Authorization: Bearer eyJhbGciOiJSUzI1NiI...' \
--header 'Content-Type: application/json' \
--data '{}'
curl --location 'http://0.0.0.0:4000/v1/chat/completions' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer eyJhbGciOiJSUzI1...' \
--data '{"model": "azure-gpt-3.5", "messages": [ { "role": "user", "content": "What's the weather like in Boston today?" } ]}'

高级功能 - 设置接受的JWT范围名称

更改JWT中的“scopes”字符串,LiteLLM会评估用户是否具有管理员访问权限。

general_settings:
master_key: sk-1234
enable_jwt_auth: True
litellm_jwtauth:
admin_jwt_scope: "litellm-proxy-admin"

高级功能 - 支出跟踪(最终用户/内部用户/团队/组织)

设置JWT令牌中对应于LiteLLM用户/团队/组织的字段。

general_settings:
master_key: sk-1234
enable_jwt_auth: True
litellm_jwtauth:
admin_jwt_scope: "litellm-proxy-admin"
team_id_jwt_field: "client_id" # 👈 可以是任何字段
user_id_jwt_field: "sub" # 👈 可以是任何字段
org_id_jwt_field: "org_id" # 👈 可以是任何字段
end_user_id_jwt_field: "customer_id" # 👈 可以是任何字段

预期的JWT:

{
"client_id": "my-unique-team",
"sub": "my-unique-user",
"org_id": "my-unique-org",
}

现在LiteLLM将自动为每次调用更新数据库中的用户/团队/组织的支出。

JWT范围

以下是JWT-Auth令牌上的范围示例

可以是列表

scope: ["litellm-proxy-admin",...]

可以是空格分隔的字符串

scope: "litellm-proxy-admin ..."

高级功能 - 允许的路由

通过配置设置JWT可以访问的路由。

默认情况下:

  • 管理员:只能访问管理路由(/team/*/key/*/user/*
  • 团队:只能访问OpenAI路由(/chat/completions等)+信息路由(/*/info

查看代码

管理员路由

general_settings:
master_key: sk-1234
enable_jwt_auth: True
litellm_jwtauth:
admin_jwt_scope: "litellm-proxy-admin"
admin_allowed_routes: ["/v1/embeddings"]

团队路由

general_settings:
主密钥: sk-1234
启用JWT认证: True
litellm_jwtauth:
...
团队ID_JWT字段: "litellm-team" # 👈 设置JWT令牌中存储团队ID的字段
允许的团队路由: ["/v1/chat/completions"] # 👈 设置接受的路由

高级 - 公钥缓存

控制公钥的缓存时间(以秒为单位)。

general_settings:
master_key: sk-1234
enable_jwt_auth: True
litellm_jwtauth:
admin_jwt_scope: "litellm-proxy-admin"
admin_allowed_routes: ["/v1/embeddings"]
public_key_ttl: 600 # 👈 关键更改

高级 - 自定义JWT字段

设置一个自定义字段,其中包含团队ID。默认情况下,会检查'client_id'字段。

general_settings:
master_key: sk-1234
enable_jwt_auth: True
litellm_jwtauth:
team_id_jwt_field: "client_id" # 👈 关键更改

所有参数

查看代码

高级 - 阻止团队

要阻止某个团队ID的所有请求,请使用/team/block

阻止团队

curl --location 'http://0.0.0.0:4000/team/block' \
--header 'Authorization: Bearer <admin-token>' \
--header 'Content-Type: application/json' \
--data '{
"team_id": "litellm-test-client-id-new" # 👈 设置团队ID
}'

解除阻止团队

curl --location 'http://0.0.0.0:4000/team/unblock' \
--header 'Authorization: Bearer <admin-token>' \
--header 'Content-Type: application/json' \
--data '{
"team_id": "litellm-test-client-id-new" # 👈 设置团队ID
}'

高级 - 插入用户 + 允许的电子邮件域

允许属于特定电子邮件域的用户自动访问代理。

general_settings:
master_key: sk-1234
enable_jwt_auth: True
litellm_jwtauth:
user_email_jwt_field: "email" # 👈 检查JWT载荷中的'email'字段
user_allowed_email_domain: "my-co.com" # 允许user@my-co.com调用代理
user_id_upsert: true # 👈 如果电子邮件有效但不在数据库中,则插入用户到数据库
优云智算