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 serie HS, como HS256, HS384 o HS512.

    • secret_key: Clave utilizada para la generación y validación de tokens. Se puede generar una clave compatible con la serie de algoritmos HS mediante 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 usuario

    • password: cadena, que representa la contraseña

    • permissions: 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 a OPENAI_API_KEY, siempre comienza con sk-, 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.