Wie schreibst du einen OAuth2-Server in Perl?

8

Ich versuche, meinen Kopf um OAuth2 und Perl zu wickeln (d. h. Net :: OAuth2) - speziell eine RESTful-API für eine Datenbank einzurichten und eine Anwendung, die sie benutzt.

Perl Oauth2-Paket führte mich zu Net :: OAuth2.

Soweit ich es beurteilen kann, gibt es ein paar Dinge, die ich tun muss (bitte korrigiert mich, wenn ich irgendwo im Unkraut unterwegs bin):

  1. Server-seitig: Erzeuge den REST-Server (der momentan mit mojolicious läuft), der mit der Datenbank kommuniziert.
  2. Serverseitig: Erstellen Sie den Authentifizierungs- / Autorisierungsserver (??)
  3. Client-Anwendung: verwendet WWW :: Mechanize (oder etwas Ähnliches), um mit dem REST-Server zu kommunizieren

In meinem Kopf, hier ist, wie es funktioniert:

  1. die Client-App hat einen API-Schlüssel (registriert beim Server (REST-Server? Auth-Server?) und "eingebacken" an den Client)
  2. Der Benutzer hat einen Eintrag (Benutzername und Passwort) in einer Tabelle in der Datenbank auf dem Server
  3. Der Benutzer startet die Client-App und versucht, auf eine geschützte Ressource zuzugreifen (etwa um eine Zeile zu aktualisieren) (wiederum zum Beispiel durch Auswahl einer "Do This Thing" -Menüoption im Client), in die der Client übersetzt die REST API URI, zB Ссылка )
  4. Der Server leitet den Client an das Authentifizierungs- / Autorisierungsbit des Servers (
  5. ) um
  6. Server, Client und Benutzer führen einen magischen OAuth-Tanz durch, um den Benutzer zu authentifizieren
  7. Der Server, der Client und der Benutzer führen einen weiteren magischen OAuth-Tanz durch, um sicherzustellen, dass der Benutzer berechtigt ist, diese Ressourcen-URI zu sehen
  8. Wenn alles in Ordnung ist, leitet der Server den Client erneut an den ursprünglich angeforderten Ressourcen-URI weiter (mit allen erforderlichen Auth-Parametern).

Ist das eine vernünftige Einschätzung des Prozesses?

Wenn ja, wäre es sinnvoller, die "Authentifizierung / Autorisierung" als Teil des REST-Servers oder als vollständig separaten Server zu verwenden? (auf der gleichen Hardware).

Net :: OAuth2 :: Profile :: WebServer erklärt es nett was auf der Seite der Client-Anwendung passieren muss.

Die Tests in Ссылка (es sei denn, ich bin wirklich etwas fehlt) arbeiten mit Net :: OAuth2 Webserver-Profil, das (wieder) die "Client-Anwendung" sein würde.

Es gibt weitere Beispiele für das Schreiben des Clients - das Herstellen einer Verbindung mit einem vorhandenen OAuth2-Server, z. B. die API von Google API -, aber ich finde keine Beispiele für das Schreiben des Servers .... (Ich bin ziemlich bereit zu RTFM, wenn ich finde die FM ... Zeiger geschätzt!)

    
bibliophylum 10.05.2013, 20:13
quelle

1 Antwort

4

Die allgemeine Idee besteht darin, einen zentralen Authentifizierungsserver mit der Verarbeitung von Anmeldeinformationen + Tokengenerierung + Richtlinien umgehen zu lassen (policy = & gt; ist diese App, die von diesem Benutzer autorisiert wurde) .

Sprechen wir zuerst vom OAuth-Server .
i) Der Server ist für eine Anmeldeseite verantwortlich, auf der der Benutzer seine Anmeldeinformationen eingeben kann.
ii) Validiert die Anmeldeinformationen. Wenn dieser Server korrekt ist, überprüft er, welche Client-App den Aufruf ausgeführt hat und überprüft, ob " diese App von diesem Benutzer autorisiert wurde". - Hier kommt das Konzept der Bereiche.
iii) Erzeugt einen Zugriffstoken / Autorisierungscode für die App.
iv) Wenn eine API von einem Client mit einem Zugriffstoken betroffen ist, sollte die API das Token intern an diesen Server übergeben. Es ist die Aufgabe dieses Servers, den Tokeninhalt zu verifizieren.

Nun die APIs
i) Die API sollte ein Token von einer Client-App akzeptieren, es an den Server übergeben - eine eindeutige Kunden-ID vom Server holen und Daten an den Client für diesen Kunden zurückgeben.

Für Apps von Drittanbietern ,
i) Sie müssen einen Registrierungsprozess haben. Der Kunde muss Client-ID und Secret haben. Mit Google können Sie sich in der Konsole registrieren.
ii) Es sollte einen Bereich geben, der jeder einzelnen API zugeordnet ist. Wenn Sie beispielsweise eine Google OAuth-App erstellen, müssen Sie Ihre App für einen Bereich registrieren, z. B. G +, Picasa, Google Drive usw.
iii) Zugriffstoken sind für den Gültigkeitsbereich eindeutig und werden den Berechtigungen zugeordnet, die der Nutzer für Ihre App erhält. Wenn die Benutzerclient-App nur G + Geltungsbereich auswählt und vom Benutzer Zugriff gewährt wird, kann die App das Token nur für den G + Endpunkt verwenden.

Eine ausführlichere Antwort zur Implementierung eines OAuth-Servers finden Sie hier: Wie würde ein effizienter OAuth2.0 Server / Provider funktionieren?

    
divyanshm 11.05.2013, 04:20
quelle

Tags und Links