OAuth2-System (experimentell)#
Xinference verwendet ein Benutzername-Passwort-Modell, um ein speicherbasiertes OAuth2-Authentifizierungs- und Autorisierungssystem aufzubauen.
Bemerkung
Wenn keine Anforderungen an Authentifizierung und Autorisierung bestehen, kann Xinference wie zuvor ohne Änderungen verwendet werden.
Berechtigung#
Derzeit definiert Xinference intern die folgenden Schnittstellenberechtigungen:
models:list: Berechtigung zum Abrufen der Modellliste und -informationen.models:read: Berechtigung zum Lesen des Modells.models:register: Berechtigung zum Registrieren von Modellen.models:unregister: Berechtigung zum Abmelden eines Modells.models:start: Berechtigung zum Starten des Modells.
models:stop: Die Berechtigung, das Modell zu stoppen.admin: Der Administrator hat Berechtigungen für alle Schnittstellen.
Erste Schritte#
Beim Starten von Xinference müssen alle Authentifizierungs- und Autorisierungsinformationen angegeben werden. Derzeit benötigt Xinference eine JSON-Datei, die die folgenden spezifischen Felder enthält:
{
"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: Dieses Feld konfiguriert sicherheitsrelevante Informationen.algorithm: Algorithmus zur Token-Erzeugung und -Analyse. Es wird empfohlen, Algorithmen derHS-Serie wieHS256,HS384oderHS512zu verwenden.secret_key: Der Schlüssel zur Generierung und Analyse von Token. Mit folgendem Befehl kann ein für dieHS-Algorithmusreihe geeigneter Schlüssel erstellt werden:openssl rand -hex 32.token_expire_in_minutes: Reserviertes Feld, das die Ablaufzeit des Tokens angibt. Derzeit überprüft die Open-Source-Version von Xinference nicht die Ablaufzeit des Tokens.
user_config: Dieses Feld dient zur Konfiguration von Benutzer- und Berechtigungsinformationen. Jede Benutzerinformation besteht aus den folgenden Feldern:username: Zeichenfolge, die den Benutzernamen angibtpassword: Zeichenfolge, die das Passwort darstelltpermissions: Eine Liste von Zeichenfolgen, die die Berechtigungen des Benutzers darstellt. Die Beschreibung der Berechtigungen entspricht dem Abschnitt über Berechtigungen in der obigen Dokumentation.api_keys: Eine Liste von Zeichenketten, die die API-Schlüssel dieses Benutzers darstellt. Der Benutzer kann über diese API-Schlüssel auf die xinference-Schnittstelle zugreifen, ohne sich anmelden zu müssen. Die Zusammensetzung der API-Schlüssel hier ähnelt der vonOPENAI_API_KEY, beginnt immer mitsk-und wird von 13 Ziffern sowie Groß- und Kleinbuchstaben gefolgt.
Nachdem Sie eine solche JSON-Datei konfiguriert haben, können Sie mit der Option --auth-config ein Xinference mit Authentifizierungs- und Autorisierungssystem aktivieren. Der Befehl für den lokalen Start lautet beispielsweise wie folgt:
xinference-local -H 0.0.0.0 --auth-config /path/to/your_json_config_file
In einer verteilten Umgebung muss diese Option nur beim Start des Supervisors angegeben werden:
xinference-supervisor -H <supervisor_ip> --auth-config /path/to/your_json_config_file
Benutzen#
Die Nutzung des Xinference-Dienstes mit Berechtigungsverwaltung entspricht der normalen Version, lediglich zu Beginn wird ein Anmeldeschritt hinzugefügt oder eine Authentifizierung mittels API-Key durchgeführt.
Verwendung von Benutzername-Passwort#
Melden Sie sich über die Befehlszeile an:
xinference login -e <endpoint> --username <username> --password <password>
Anmeldung mit dem Python SDK:
from xinference.client import Client
client = Client('<endpoint>')
client.login('<name>', '<pass>')
Für Benutzer der Weboberfläche wird beim Öffnen der Weboberfläche zunächst die Anmeldeseite angezeigt. Nach der Anmeldung können die Funktionen der Weboberfläche normal genutzt werden.
Nutzung der Api-Key-Authentifizierung#
Für Kommandozeilenbenutzer muss lediglich die Option --api-key oder -ak zu dem auszuführenden Befehl hinzugefügt werden.
xinference launch <other options> --api-key <your_api_key>
Für Python-Client-Benutzer kann der Parameter api_key bei der Initialisierung des Client-Objekts übergeben werden, genau wie beim OPENAI-Client.
from xinference.client import Client
client = Client('<endpoint>', api_key='<your_api_key>')
Selbstverständlich ist Xinference auch vollständig kompatibel mit der Verwendungsweise des OPENAI Python-Clients.
from openai import OpenAI
client = OpenAI(base_url="<xinference endpoint>" + "/v1", api_key="<your_api_key>")
client.models.list()
Bei HTTP-Anfragen wird im Request-Header Authorization: Bearer api-key übergeben.
curl --request GET \
--url "<xinference endpoint>" \
--header "Authorization: Bearer <your_api_key>"
HTTP-Statuscode#
Folgende zwei HTTP-Statuscodes wurden hinzugefügt:
401 Unauthorized: Die Anmeldeinformationen oder die Token-Überprüfung sind ungültig.403 Forbidden: Keine ausreichenden Berechtigungen für den Zugriff auf die Schnittstelle.
Für Benutzer der Befehlszeile, des SDK oder der Web-UI gibt es klare Hinweise bei Autorisierungs- und Berechtigungsproblemen.
Achtung#
Diese Funktion befindet sich im Experimentierstadium. Feedback und Vorschläge sind willkommen über GitHub issues oder die Telegram-Gruppe.