AuthIntegration/de
From OpenSimulator
Languages: |
English Deutsch |
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.
```python
- !/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.
```csharp 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.
```python
- !/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(); ```