Système OAuth2 (expérimental)#
Xinference utilise un modèle de nom d’utilisateur et mot de passe pour construire un système d’authentification et d’autorisation OAuth2 basé sur la mémoire.
Note
S’il n’y a pas d’exigences d’authentification et d’autorisation, vous pouvez utiliser Xinference comme avant, sans aucune modification.
Autorisation#
Actuellement, Xinference a défini en interne les permissions d’interface suivantes :
models:list: Permet d’obtenir la liste des modèles et les informations associées.models:read: Permission d’utiliser le modèle.models:register: Permission d’enregistrer le modèle.models:unregister: Annule l’enregistrement des autorisations du modèle.models:start: Autorisation de démarrer un modèle.models:stop: Autorisation d’arrêter le modèle.admin: L’administrateur dispose des permissions sur toutes les interfaces.
Commencez à utiliser#
Au démarrage de Xinference, toutes les informations d’authentification et d’autorisation doivent être spécifiées. Actuellement, Xinference nécessite un fichier JSON contenant les champs spécifiques suivants :
{
"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: Ce champ configure les informations relatives à la sécurité.algorithm: Algorithme utilisé pour la génération et l’analyse des jetons. Il est recommandé d’utiliser les algorithmes de la sérieHS, par exempleHS256,HS384ouHS512.secret_key: Clé utilisée pour la génération et l’analyse des jetons. Vous pouvez utiliser la commande suivante pour générer une clé adaptée aux algorithmes de la sérieHS:openssl rand -hex 32.token_expire_in_minutes: champ réservé, indique le temps d’expiration du jeton. Actuellement, la version open source de Xinference ne vérifie pas le temps d’expiration du jeton.
user_config: Ce champ sert à configurer les informations des utilisateurs et des permissions. Chaque information utilisateur est composée des champs suivants :username: chaîne de caractères, représentant le nom d’utilisateurpassword: chaîne de caractères, représentant le mot de passepermissions: Liste de chaînes de caractères, représentant les autorisations dont dispose l’utilisateur. La description des autorisations est conforme à la documentation de la section sur les autorisations ci-dessus.api_keys: liste de chaînes de caractères, représentant les clés API possédées par l’utilisateur. Grâce à ces clés API, l’utilisateur peut accéder à l’interface Xinference sans passer par l’étape de connexion. La composition de la clé API ici est similaire à celle deOPENAI_API_KEY, commençant toujours parsk-, suivie de 13 chiffres, lettres majuscules et minuscules.
Après avoir configuré un tel fichier JSON, vous pouvez utiliser l’option --auth-config pour activer Xinference avec un système d’authentification et d’autorisation. Par exemple, la commande de démarrage local est la suivante :
xinference-local -H 0.0.0.0 --auth-config /path/to/your_json_config_file
Dans un environnement distribué, il suffit de spécifier cette option lors du démarrage du supervisor :
xinference-supervisor -H <supervisor_ip> --auth-config /path/to/your_json_config_file
Utilisation#
L’utilisation du service Xinference avec gestion des permissions reste cohérente avec la version normale, seule l’étape de connexion est ajoutée au début, ou l’authentification via api-key est utilisée.
Utilisation basée sur un nom d’utilisateur et un mot de passe#
Connexion via ligne de commande :
xinference login -e <endpoint> --username <username> --password <password>
Utilisation du SDK Python pour se connecter :
from xinference.client import Client
client = Client('<endpoint>')
client.login('<name>', '<pass>')
Pour les utilisateurs de l’interface Web, lors de l’ouverture de l’interface Web, ils seront d’abord redirigés vers la page de connexion. Une fois connectés, ils pourront utiliser normalement les fonctionnalités de l’interface Web.
Méthode d’utilisation basée sur l’authentification par clé API#
Pour les utilisateurs en ligne de commande, il suffit d’ajouter l’option --api-key ou -ak à la commande que vous souhaitez exécuter.
xinference launch <other options> --api-key <your_api_key>
Pour les utilisateurs du client Python, il suffit de passer le paramètre api_key lors de l’initialisation de l’objet client, comme pour le client OPENAI.
from xinference.client import Client
client = Client('<endpoint>', api_key='<your_api_key>')
Bien sûr, Xinference est également entièrement compatible avec l’utilisation du client Python OPENAI.
from openai import OpenAI
client = OpenAI(base_url="<xinference endpoint>" + "/v1", api_key="<your_api_key>")
client.models.list()
Pour une requête HTTP, passez Authorization: Bearer api-key dans l’en-tête de la requête.
curl --request GET \
--url "<xinference endpoint>" \
--header "Authorization: Bearer <your_api_key>"
Code d’état HTTP#
Les deux codes d’état HTTP suivants ont été ajoutés :
401 Unauthorized: Les informations de connexion ou la validation du jeton a échoué.403 Forbidden: Aucune permission suffisante pour accéder à l’interface.
Pour les utilisateurs de ligne de commande, SDK ou interface Web, des messages d’information clairs sont affichés en cas de problèmes d’autorisation et de droits d’accès.
Attention#
Cette fonctionnalité est au stade expérimental. N’hésitez pas à fournir des retours et suggestions via GitHub issues ou le groupe Telegram.