AuthIntegration/de

From OpenSimulator

Revision as of 04:32, 4 December 2023 by Manni (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Contents

Einführung

Es gibt verschiedene Möglichkeiten, OpenSimulator mit anderen Authentifizierungssystemen zu integrieren. Die erste besteht darin, ein System zu erstellen, das einen "Web-Login-Schlüssel" generiert, den ein geeigneter Client für die einmalige Authentifizierung verwenden kann. Die zweite Möglichkeit besteht darin, die Methode AllowSetPassword des OpenSimulator ROBUST-Authentifizierungsdienstes aufzurufen, um direkt einen Klartextstring zu übergeben, den OpenSimulator geeignet hashen und speichern wird. Die dritte Möglichkeit besteht darin, extern einen OpenSimulator-Passworthash und ein Salz zu erstellen und diese entweder direkt in der Datenbank oder über den ROBUST-Authentifizierungsdienst festzulegen.

Web-Login-Schlüssel

Leider ist dieser Abschnitt unvollständig. Wenn Sie Code lesen können, sollten Sie sich das OpenSim.Services.AuthenticationService-Paket in OpenSimulator ansehen. Dies zeigt Ihnen, wie der Web-Login-Schlüssel aus der Datenbank gelesen und gegen die Client-Eingabe verwendet wird. Wenn Sie diesen Dienst verwenden möchten, fragen Sie bitte auch auf opensim-dev nach, was dazu beitragen wird, diesen Abschnitt weiter auszuarbeiten.

Direktes Setzen des Passworts

Es gibt eine Option, eine externe SetPassword-Anfrage an den OpenSimulator-Authentifizierungsdienst zu ermöglichen. Dies kann nur aktiviert werden, wenn Sie sich absolut sicher sind hinsichtlich der Sicherheitsauswirkungen (d.h. niemand Unzuverlässiges wird es aufrufen können). Leider steht dies nur auf dem ROBUST-Authentifizierungsdienst zur Verfügung, wenn Sie ein Grid betreiben. Auf Standalone-Installationen ist dies derzeit nicht verfügbar.

Um die Methode SetPassword zu aktivieren, setzen Sie AllowSetPassword = true im Abschnitt [AuthenticationService] von Robust.ini.

Dann können Sie, solange Sie die UUID des Benutzers kennen (was nicht besonders hilfreich ist, wenn Sie einen Benutzer von Grund auf erstellen möchten), Python-Code wie den folgenden verwenden, um ein Passwort festzulegen.

#!/usr/bin/python

import httplib
import urllib

params = urllib.urlencode({'METHOD':'setpassword', 'PRINCIPAL' : 'dd5b77f8-bf88-45ac-aace-35bd76426c81', 'PASSWORD':'letmein'})
conn = httplib.HTTPConnection("localhost", 8003);
conn.request("POST", "/auth/plain", params)
response = conn.getresponse()
print response.read();


Erstellung eines OpenSimulator-kompatiblen Passworts extern

OpenSimulator-Passwörter sind gesalzen und gehasht. Aus historischen Gründen wird mehr Arbeit verrichtet, als wirklich notwendig ist. Sie können den OpenSimulator-Code dafür in der Methode AuthenticationServiceBase.SetPassword() im Paket OpenSim.Services.AuthenticationService sehen. Der wichtige Ausschnitt wird unten wiedergegeben.

public virtual bool SetPassword(UUID principalID, string password)
{
    string passwordSalt = Util.Md5Hash(UUID.Random().ToString());
    string md5PasswdHash = Util.Md5Hash(Util.Md5Hash(password) + ":" + passwordSalt); 
           
   ...
}


Die erste Zeile erstellt ein Salz, indem sie eine zufällige UUID hashet. Beachten Sie bitte, dass dies ein Salz ist, das eine UUID ist, aber eine ohne Bindestriche (-).

Die zweite Zeile hashet das Klartextpasswort (z. B. "123456"), fügt einen Doppelpunkt hinzu und dann das Salz. Es wird dann das gesamte Ding erneut gehasht (jemand mag wirklich seinen Hash) und produziert einen endgültigen Passworthash.

Das Salz und der Hash werden dann in den Feldern passwordSalt und passwordHash der Tabelle auth in OpenSimulator gespeichert.

Festlegung

Es gibt zwei Möglichkeiten, ein OpenSimulator-Passwort von einem externen System aus festzulegen, anstatt die Methode SetPassword() zu verwenden.

Direktes Schreiben in die Datenbank

Sie können das Salz und den Hash direkt setzen, indem Sie in die Felder passwordSalt und passwordHash der Tabelle auth in OpenSimulator schreiben.

Aufruf des ROBUST-Authentifizierungsdienstes

Alternativ, wenn ROBUST ausgeführt wird und man direkten Zugriff auf die Instanz hat, die den Authentifizierungsdienst ausführt, kann man die Methode SetAuthInfo aufrufen, um diese Felder zu speichern. Leider ist dieser Mechanismus derzeit nicht für eigenständige Instanzen verfügbar.

Um die Methode SetAuthInfo zu aktivieren, setzen Sie AllowSetAuthInfo = true im Abschnitt [AuthenticationService] von Robust.ini.

Dann können Sie, wiederum solange Sie die UUID des Benutzers kennen (was nicht besonders hilfreich ist, wenn Sie einen Benutzer von Grund auf erstellen möchten), Python-Code wie den folgenden verwenden, um Hash und Salz direkt festzulegen.

#!/usr/bin/python

import httplib
import urllib

params = urllib.urlencode({'METHOD':'setauthinfo', 'PRINCIPAL' : 'dd5b77f8-bf88-45ac-aace-35bd76426c81', 'PasswordHash':'57956c4bff2e4fc19995613c6256cc98', 'PasswordSalt':'ed9e530476b9c984cc869d2c64d348b2'})
conn = httplib.HTTPConnection("localhost", 8003);
conn.request("POST", "/auth/plain", params)
response = conn.getresponse()
print response.read();
Personal tools
General
About This Wiki