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 der HS-Serie wie HS256, HS384 oder HS512 zu verwenden.

    • secret_key: Der Schlüssel zur Generierung und Analyse von Token. Mit folgendem Befehl kann ein für die HS-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 angibt

    • password: Zeichenfolge, die das Passwort darstellt

    • permissions: 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 von OPENAI_API_KEY, beginnt immer mit sk- 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.