2017-05-09 1 views
2

Ich erforsche zu verwenden, wieWie für die Entwicklung einer API verbraucht Anwendung mit Laravel, Laravel Pass, Lumen und AngularJS</p> <p>Ich habe 3 Domains Laravel Pass für Auth und Lumen als api

  • folgt Auth .dev - Laravel 5.4 + Pass oAuth Server (Auth als Server)
  • api.dev - Lumen (als API seaver)
  • app.dev - php + angularjs (einzelne Seite app)

Ich kann diese 3 zusammen nicht richtig konfigurieren. Ich habe Setup auth.dev und es wird erfolgreich Tokens generieren und ich kann sie von app.dev verwenden.

Aber meine Anforderung ist, verwenden 3 separate Instanz für API, Auth und APP

Ich versuchte es über Lumen zu konfigurieren (Access Token mit auth.dev zu validieren), aber es funktioniert nicht.

Ist dies möglich oder gibt es Vorschläge, dies zu erreichen?

+0

Wir brauchen Informationen darüber, was "nicht funktioniert". Welche Fehler/Probleme sehen Sie, welche Schritte unternehmen Sie, um sie zu replizieren? – samiles

+0

Nun, wenn ich auth: api geschützten Route an API (Lumen) mit der richtigen Autorisierung Informationen und Struktur aufrufen, wird es nicht autorisierte Fehler zurückgeben. Ich möchte diese Routen (die sich in der API befinden) vom Auth-Server validieren. – Umanda

Antwort

1

Ich habe vor kurzem an einer Implementierung gearbeitet, die mit dieser identisch ist. Es hat ein bisschen Mühe gebraucht, um es effizient zu machen, aber es funktioniert!

Wenn Sie die Token, die Sie erhalten, validieren möchten (was Sie tun sollten), benötigen Sie eine Möglichkeit, das Token, das Lumen von Client-Anwendungen empfängt, an Ihren OAuth-Dienst weiterzuleiten und einige Details dieser Authentifizierung zurückzugeben Deine Lumen App.

Wenn Sie wissen, dass Ihr Lumen-API-Dienst immer auf demselben Computer ausgeführt wird, können Sie eine Art von RPC verwenden, um unnötigerweise über HTTP zu sparen. Ich verwendete eine Befehlszeilenschnittstelle über einen benutzerdefinierten Artisan-Befehl im OAuth Service und ein benutzerdefiniertes Skript, um es von der Lumen-Seite, die ich RemoteArtisan aufrufen.

Die andere Methode ist über HTTP, wodurch Ihr OAuth-Dienst seinen eigenen sehr grundlegenden API-Endpunkt bereitstellt. So etwas wie dies in routes/api.php tun sollten:

Route::middleware('client')->get('user', function (Request $request) { 
    $helper = new App\FirstPartyClientHelper; 

    return response()->json($helper->getTokenOwnerDetails($request->bearerToken())); 

}); 

Mein FirstPartyClientHelper ist eine einfache Klasse, die das Token analysiert die ID aus ihm heraus zu bekommen und verwenden, dass die Mittel aus dem OAuth DB zu holen, die ich will zurück schicken Lumen. Sie müssen möglicherweise nicht viele Abfragen ausführen oder viele Daten hier senden, es könnte einfach ein Pass/Fail sein. Hängt von Ihren Bedürfnissen ab.

Eine Sache, die ich empfehlen würde, herauszufinden und zurück zu Ihrer Lumen App zu senden, ist, welche Bereiche dem Token zugewiesen wurden. Sie werden diese wahrscheinlich zusammen mit der verschiedenen in Passport verfügbaren Bereichs-Middleware verwenden.

Die einzige Option hier ist im Moment, diese Middleware-Klassen (CheckScopes und CheckForAnyScope) in Ihre Lumen-App zu kopieren und manuell zu laden. Aber das ist ziemlich einfach, da sie einfach sind.

Möglicherweise müssen Sie sie ändern, damit sie die Bereiche sehen können, die von Ihrem OAuth-Endpunkt über Ihre Authenticatable-Klasse (in der Regel User) zurückkommen.

Jede dieser Lösungen wird zu jeder Anforderung einen Overhead hinzufügen, so dass es sich lohnt, darüber nachzudenken, das Ergebnis für einige Zeit auf dem Lumen-Ende zwischenzuspeichern.

Wenn Sie das tun, stellen Sie sicher, dass es nicht für eine lange Zeit zwischengespeichert wird, da abgelaufene Token möglicherweise weiterhin als gültig betrachtet werden können.

Speichern Sie alternativ die Ablaufzeit des Tokens irgendwo in Ihrem Cache und validieren Sie diese gegen den Zeitpunkt der Anfrage, um sicherzustellen, dass das Token nicht abgelaufen ist.

Hoffe, das hilft.

Verwandte Themen