Sistema OAuth2 (experimental)#
Xinference utiliza un modelo de nombre de usuario y contraseña para construir un sistema de autenticación y autorización OAuth2 basado en memoria.
Nota
Si no hay requisitos de autenticación y autorización, se puede usar Xinference como antes, sin necesidad de realizar ningún cambio.
Permisos#
Actualmente, Xinfe define internamente los siguientes permisos de interfaz:
models:list: permiso para obtener la lista de modelos e información.models:read: Permiso para usar el modelo.models:register: Permiso para registrar modelos.
models:unregister: revoca el permiso de registro del modelo.models:start: Permiso para iniciar el modelo.models:stop: Permiso para detener el modelo.admin: El administrador tiene permisos para todas las interfaces.
Inicio#
Al iniciar Xinference, es necesario especificar toda la información de verificación y autorización. Actualmente, Xinference requiere un archivo JSON que contenga los siguientes campos específicos:
{
"auth_config": {
"algorithm": "HS256",
"secret_key": "09d25e094faa6ca2556c818166b7a9563b93f7099f6f0f4caa6cf63b88e8d3e7",
"token_expire_in_minutes": 30
},
"user_config": [
{
"username": "user1",
"password": "secret1",
"permissions": [
"admin"
],
"api_keys": [
"sk-72tkvudyGLPMi",
"sk-ZOTLIY4gt9w11"
]
},
{
"username": "user2",
"password": "secret2",
"permissions": [
"models:list",
"models:read"
],
"api_keys": [
"sk-35tkasdyGLYMy",
"sk-ALTbgl6ut981w"
]
}
]
}
auth_config: Este campo configura la información relacionada con la seguridad.algorithm: Algoritmo utilizado para la generación y análisis de tokens. Se recomienda utilizar algoritmos de la serieHS, comoHS256,HS384oHS512.secret_key: Clave utilizada para la generación y validación de tokens. Se puede generar una clave compatible con la serie de algoritmosHSmediante el comando:openssl rand -hex 32.token_expire_in_minutes: campo reservado, indica el tiempo de expiración del token. Actualmente, la versión de código abierto de Xinference no verifica el tiempo de expiración del token.
user_config: Este campo se utiliza para configurar información de usuarios y permisos. Cada usuario está compuesto por los siguientes campos:username: cadena que representa el nombre de usuariopassword: cadena, que representa la contraseñapermissions: lista de cadenas que representa los permisos que tiene el usuario. La descripción de los permisos es la indicada en la sección de permisos de la documentación anterior.api_keys: Lista de cadenas que representa las claves API que posee este usuario. El usuario puede acceder a la interfaz de xinference a través de estas claves API sin necesidad de iniciar sesión. La composición de la clave API aquí es similar aOPENAI_API_KEY, siempre comienza consk-, seguido de 13 caracteres que pueden ser dígitos o letras mayúsculas y minúsculas.
Una vez configurado un archivo JSON de este tipo, se puede usar la opción --auth-config para habilitar Xinference con un sistema de autenticación y autorización. Por ejemplo, el comando de inicio local se muestra a continuación:
xinference-local -H 0.0.0.0 --auth-config /path/to/your_json_config_file
En un entorno distribuido, solo es necesario especificar esta opción al iniciar el supervisor:
xinference-supervisor -H <supervisor_ip> --auth-config /path/to/your_json_config_file
Usar#
El uso del servicio Xinference con gestión de permisos es consistente con la versión normal, solo que se ha añadido un paso de inicio de sesión al inicio, o se utiliza api-key para la autenticación.
Uso basado en nombre de usuario y contraseña#
Inicio de sesión mediante línea de comandos:
xinference login -e <endpoint> --username <username> --password <password>
Inicia sesión usando el SDK de Python:
from xinference.client import Client
client = Client('<endpoint>')
client.login('<name>', '<pass>')
Para los usuarios de la interfaz web, al abrirla, se les redirigirá primero a la página de inicio de sesión. Después de iniciar sesión, podrán utilizar las funciones de la interfaz web con normalidad.
Modo de uso basado en autenticación Api-Key#
Para usuarios de línea de comandos, solo es necesario añadir la opción --api-key o -ak al comando que se desea ejecutar.
xinference launch <other options> --api-key <your_api_key>
Para los usuarios del cliente Python, basta con pasar el parámetro api_key al inicializar el objeto cliente, tal como se hace con el cliente OPENAI.
from xinference.client import Client
client = Client('<endpoint>', api_key='<your_api_key>')
Por supuesto, Xinference también es completamente compatible con el uso del cliente Python de OPENAI.
from openai import OpenAI
client = OpenAI(base_url="<xinference endpoint>" + "/v1", api_key="<your_api_key>")
client.models.list()
Para solicitudes HTTP, pase Authorization: Bearer api-key en el encabezado de la solicitud.
curl --request GET \
--url "<xinference endpoint>" \
--header "Authorization: Bearer <your_api_key>"
Código de estado HTTP#
Se han agregado los siguientes dos códigos de estado HTTP:
401 Unauthorized: La información de inicio de sesión o la verificación del token ha fallado.403 Forbidden: No hay suficientes permisos para acceder a la interfaz.
Para los usuarios de línea de comandos, SDK o interfaz web, hay mensajes claros cuando se encuentran problemas de autorización y permisos.
atención#
Esta funcionalidad se encuentra en fase experimental. Puedes enviar tus comentarios y sugerencias a través de los GitHub issues o del grupo de Telegram.