Hallöchen mal wieder.
Mann war hier gestern was los... Sorry, ich hab jetzt die letzten Posts nur ein wenig überflogen, aber ich will nochmal klarheit bezüglich einiger sachen schaffen:
1. der minetest-passworthash wird erzeugt aus dem Spielernamen und dem passwort konkateniert
Code: Select all
// auth.cpp:34
// Get an sha-1 hash of the player's name combined with
// the password entered. That's what the server uses as
// their password. (Exception : if the password field is
// blank, we send a blank password - this is for backwards
// compatibility with password-less players).
std::string translate_password(const std::string &name,
const std::string &password)
{
if (password.length() == 0)
return "";
std::string slt = name + password;
SHA1 sha1;
sha1.addBytes(slt.c_str(), slt.length());
unsigned char *digest = sha1.getDigest();
std::string pwd = base64_encode(digest, 20);
free(digest);
return pwd;
}
2. Es gibt (momentan) in der API keine Möglichkeit eine asynchrone Abfrage zu machen, während ein Client sich einloggt. Der Server ruft get_auth vom auth handler auf und erwartet eine sofortige Antwort, also "reinlassen" oder "ablehnen". Selbiges gilt für die prejoinplayer-callbacks.
Wenn man sich auf Red Cat Creative anmeldet (war zumindest mal so), landet man erst in einer Art Turm ohne Interactrechte, ehe man (nach ein paar sekunden bis minuten) zu seinem vorherigen aufenthaltsort teleportiert wird und sein inventar wiederkriegt. Die haben dort ihre eigene Spielerverwaltung implementiert. Darum kommt man denke ich nicht rum, wenn man die auth-info asynchron von einem server holen muss...
3. Ja, Hash ist Verschlüsselung, aber mit einem wichtigen Unterschied: Verschlüsselung kann man (mit dem richtigen Schlüssel) rückgängig machen, Hashes (idealerweise) nicht.
Unabhängig davon wäre ich dafür, dass man sich auf der webseite zumindest einmal registrieren und dort das pw hinterlegen muss, bevor man auf den server kommt. Nicht für jeden Server einzeln, sondern einmal eine Art Masterpasswort festlegen, mit dem man sich bei neuen Servern erstmals anmeldet, und wenn man will, kann man pro Server das Passwort individuell ändern.
Das würde natürlich implizieren dass jeder Server trotzdem noch eine lokale Auth-Datenbank hat, und damit auch ohne Probleme eigene Privilegien setzen kann.
EDIT: bitte weist mich nicht darauf hin, wenn ich etwas wiederholt habe, das erzeugt nur unötig mehr posts.