Sistema OAuth2 (sperimentale)#
Xinference utilizza un sistema di autenticazione e autorizzazione basato su OAuth2 in memoria, basato su un modello di nome utente e password.
Nota
Se non ci sono requisiti di autenticazione e autorizzazione, puoi utilizzare Xinference come prima, senza alcuna modifica.
Autorizzazione#
Attualmente, Xinference ha definito internamente le seguenti autorizzazioni di interfaccia:
models:list: Autorizzazione per ottenere l’elenco e le informazioni dei modelli.models:read: Permesso di utilizzare il modello.models:register: Permessi per registrare il modello.models:unregister: Revoca la registrazione del modello.models:start: Autorizzazione per avviare il modello.models:stop: Autorizzazione per fermare il modello.admin: L’amministratore ha i permessi per tutte le interfacce.
Inizia a usare#
All’avvio di Xinference, è necessario specificare tutte le informazioni di autenticazione e autorizzazione. Attualmente, Xinference richiede un file JSON contenente i seguenti campi specifici:
{
"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: questo campo configura le informazioni relative alla sicurezza.algorithm: Algoritmo utilizzato per la generazione e l’analisi dei token. Si consiglia di utilizzare algoritmi della serieHS, comeHS256,HS384oHS512.secret_key: chiave utilizzata per la generazione e l’analisi dei token. È possibile generare una chiave compatibile con gli algoritmi della serieHSutilizzando il comando:openssl rand -hex 32.token_expire_in_minutes: Campo riservato, indica il tempo di scadenza del token. Attualmente, la versione open source di Xinference non verifica la scadenza del token.
user_config: Questo campo viene utilizzato per configurare le informazioni su utenti e permessi. Ogni informazione utente è composta dai seguenti campi:username: stringa, rappresenta il nome utentepassword: stringa, rappresenta la passwordpermissions: elenco di stringhe che rappresenta i permessi posseduti dall’utente. La descrizione dei permessi è come indicata nella sezione della documentazione relativa ai permessi.api_keys: Lista di stringhe, che rappresenta le api-key possedute dall’utente. Tramite queste api-key, l’utente può accedere all’interfaccia di xinference senza dover effettuare il login. La composizione di api_key qui è simile aOPENAI_API_KEY, inizia sempre consk-, seguita da 13 caratteri tra numeri e lettere maiuscole/minuscole.
Una volta configurato un file JSON di questo tipo, è possibile abilitare Xinference con un sistema di autenticazione e autorizzazione utilizzando l’opzione --auth-config. Ad esempio, il comando per l’avvio locale è il seguente:
xinference-local -H 0.0.0.0 --auth-config /path/to/your_json_config_file
In ambiente distribuito, è sufficiente specificare questa opzione all’avvio del supervisor:
xinference-supervisor -H <supervisor_ip> --auth-config /path/to/your_json_config_file
utilizza#
Usare il servizio Xinference con gestione dei permessi è identico alla versione normale, con l’unica differenza che nella fase iniziale è stato aggiunto un passaggio di login, oppure si utilizza un api-key per l’autenticazione.
Basato sulla modalità di utilizzo nome utente-password.#
Accesso tramite riga di comando:
xinference login -e <endpoint> --username <username> --password <password>
Login con Python SDK:
from xinference.client import Client
client = Client('<endpoint>')
client.login('<name>', '<pass>')
Per gli utenti dell’interfaccia Web, all’apertura dell’interfaccia Web, si verrà reindirizzati alla pagina di login. Dopo aver effettuato l’accesso, si potranno utilizzare normalmente le funzionalità dell’interfaccia Web.
Modalità d’uso basata sull’autenticazione tramite Api-Key#
Per gli utenti da riga di comando, è sufficiente aggiungere l’opzione --api-key o -ak al comando che si desidera eseguire.
xinference launch <other options> --api-key <your_api_key>
Per gli utenti del client Python, è sufficiente passare il parametro api_key durante l’inizializzazione dell’oggetto client, proprio come si fa con il client OPENAI.
from xinference.client import Client
client = Client('<endpoint>', api_key='<your_api_key>')
Certo, Xinference è completamente compatibile anche con l’uso del client Python OPENAI.
from openai import OpenAI
client = OpenAI(base_url="<xinference endpoint>" + "/v1", api_key="<your_api_key>")
client.models.list()
Per le richieste HTTP, trasmetti Authorization: Bearer api-key nell’intestazione della richiesta.
curl --request GET \
--url "<xinference endpoint>" \
--header "Authorization: Bearer <your_api_key>"
Codice di stato HTTP#
Sono stati aggiunti i seguenti due codici di stato HTTP:
401 Unauthorized: le informazioni di accesso o la verifica del token non sono valide.403 Forbidden: Non hai i permessi sufficienti per accedere all’interfaccia.
Per gli utenti da riga di comando, SDK o Web UI, vengono forniti messaggi chiari in caso di problemi di autorizzazione e permessi.
Attenzione#
Questa funzionalità è in fase sperimentale. I feedback e i suggerimenti sono benvenuti tramite GitHub issues o il gruppo Telegram.