2016-05-19 15 views
1

Wie kann ich überprüfen, ob ein bestimmtes Passwort mit dem Passwort aus der Sammlung _users in arangoDB übereinstimmt?arangodb verify _users password

Ich weiß, dass es mit Foxx App und Arangosh gemacht werden kann, aber ich benutze sie nicht, da ich meine eigene API in Python verwende. Ich weiß also nicht, wie ich auf das Passwort zugreifen und prüfen soll, ob es mit dem angegebenen Passwort übereinstimmt, ohne Foxx oder Arangosh zu verwenden.

Antwort

2

Sie sollten sich nicht auf die System _users Sammlung für Ihre eigene Benutzerlogik verlassen. Die Sammlung ist ausschließlich für die eigenen Benutzerobjekte von ArangoDB gedacht, nicht für die Benutzerverwaltung auf Anwendungsebene.

Wenn Sie wirklich die eigene Benutzerverwaltung von ArangoDB verwenden möchten, ist die Verwendung von org/arangodb/users innerhalb von ArangoDB (z. B. mit Foxx) die beste Möglichkeit, dies bei deaktivierter Authentifizierung anzuzeigen. Das Modul stellt eine isValid Methode, die einen Benutzernamen und ein Passwort nimmt und gibt eine Bedingung, die anzeigt, ob die Kombination gültig ist oder nicht:

var users = require('org/arangodb/users'); 
controller.post('/checkpw', function (req, res) { 
    var credentials = req.params('credentials'); 
    res.json({ 
    valid: users.isValid(
     credentials.username, 
     credentials.password 
    ) 
    }); 
}) 
.bodyParam('credentials', joi.object({ 
    username: joi.string().required(), 
    password: joi.string().required() 
}).required()); 

Der Benutzer HTTP-API zur Zeit belichten diese Methode nicht, so ist dies der einzige Weg, um dies zu tun, ohne sich auf äußerst instabile Implementierungsdetails verlassen zu müssen (das Format der _users Sammlung hat sich während 2.x geändert und die Sammlung könnte sich in der Zukunft wieder ändern).

BEARBEITEN: ArangoDB 3.0 wird wahrscheinlich eine API-Route hinzufügen, die ein Token zurückgibt (anstatt die Datenbank mit Sitzungsobjekten aufzufüllen), wenn sie mit einem gültigen Benutzernamen und Passwort versehen ist. Dies sollte die Integration in die integrierte Benutzerverwaltung erleichtern, aber die Vorbehalte bleiben gleich: ArangoDB-Benutzer sind in erster Linie für die Autorisierung auf API-Ebene gedacht, nicht für Anwendungslogik.

+0

Danke. Dann denke ich, dass die beste Option sein wird, meine eigene Benutzer-Sammlung zu erstellen – Dovi

1

Der einfachste Weg besteht darin, einfach eine einfache HTTP-Anfrage auszuprobieren und nach dem Ergebnis zu suchen. Der einfachste Aufruf ist _api/version; Wir präfixieren die Datenbank, um herauszufinden, ob der Benutzer auf eine bestimmte Datenbank zugreifen darf. Für dieses Beispiel verwenden wir _system; Sie müssen es durch die Datenbank ersetzen, für die Sie die Authentifizierung testen möchten.

curl --dump - http://Joe:[email protected]:8529/_db/_system/_api/version 
GET /_db/_system/_api/version HTTP/1.1 
Authorization: Basic Sm9lOnBhc3N2b2lk 
User-Agent: curl/7.38.0 
Host: localhost:8529 
Accept: */* 


HTTP/1.1 200 OK 
Server: ArangoDB 
Connection: Keep-Alive 
Content-Type: application/json; charset=utf-8 
Content-Length: 37 

{"server":"arango","version":"2.8.8"} 

curl --dump - http://Joe:[email protected]:8529/_db/_system/_api/version 
GET /_db/_system/_api/version HTTP/1.1 
Authorization: Basic Sm9lOldST05HcGFzc3ZvaWQ= 
User-Agent: curl/7.38.0 
Host: localhost:8529 
Accept: */* 

HTTP/1.1 401 Unauthorized 
Server: ArangoDB 
Content-Type: text/plain; charset=utf-8 
Www-Authenticate: basic realm="arangodb/_system" 
Connection: Keep-Alive 
Content-Length: 0 

Sie müssen also für den HTTP-Statuscode überprüfen: 200 -> Erfolg; 401 -> fehlgeschlagen. Details zur Python-spezifischen HTTP-Behandlung finden Sie unter howto create authentication headers with python.

+0

Die Sache ist, dass ich keine Arangodb-Authentifizierung aktiviert habe, so kann ich mit falschem oder korrektem Passwort zugreifen 'Sie sind dabei, sich auf der Seite" localhost "mit dem Benutzernamen" Joe "einzuloggen, aber die Website nicht erforderlich Authentifizierung [...] '. Ich möchte die Authentifizierung nicht aktivieren, da die Benutzer nicht direkt auf die Datenbank zugreifen, sondern über eine App, also möchte ich einfach den Vorteil nutzen, dass Arangodb mit '_users' Sammlung kommt und diese verwendet. Wenn es nicht möglich ist, das Passwort von '_users' zu erhalten, sollte ich vielleicht eine eigene Benutzersammlung erstellen? (aber das habe ich versucht zu vermeiden) – Dovi