2017-07-10 1 views
6

Ich baue eine API und benutze Laravel Passport für die Authentifizierung.Wie kann ich ein Token für einen Passwortzuschlag-Client mit Laravel Passport erstellen?

Die API wird für unsere mobile App verwendet, daher verwenden wir den Password Grant-Client.

Alles funktioniert gut, und ein Benutzer kann sich anmelden, um ein Zugriffs-Token zu erhalten. Wir haben einen Registrierungsendpunkt erstellt, der es einem Benutzer ermöglicht, sich anzumelden. Wir benötigen die API, um zu diesem Zeitpunkt auch ein Zugriffs-Token zurückzugeben.

Wenn Sie durch die Dokumentation schauen, gibt es keine Möglichkeit, ein Zugriffstoken programmgesteuert zu erstellen.

Wie kann ich ein Zugriffstoken für einen Password Grant Client in meinem Controller erstellen? Ich möchte natürlich keine HTTP-Anfrage an meine eigene API senden, um sie zu bekommen.

Ich weiß, dass ich einen Personal Access Grant Client verwenden und createToken für das Benutzermodell aufrufen kann, aber das bedeutet, dass das Zugriffstoken einem anderen Client zugeordnet ist. Das scheint mir nicht richtig zu sein.

Antwort

0

Ich weiß, dass ich einen persönlichen Zugang Grants-Client verwenden können und createToken auf dem Benutzermodell nennen, aber das bedeutet, dass die Zugriffstoken mit einem anderen Client zugeordnet ist

nicht sicher, was Sie damit meinen, Könntest du mehr erklären?

Nun ist dies nicht ideal, aber Sie könnten in der Lage sein \League\OAuth2\Server\Grant\PasswordGrant zu injizieren und

respondToAccessTokenRequest(ServerRequestInterface $request 
          ResponseTypeInterface $responseType, 
          \DateInterval $accessTokenTTL) 

verwenden Sie alle diese Objekte bauen würde, aber dies ist die einzige öffentliche Methode für Kennwort, das jeder Token-Informationen zurückgibt.

2

Ich habe seit ein paar Wochen mit Passport gespielt und von dem, was ich in der Dokumentation gesehen habe, gibt es nicht viele der Methoden, die es zum Erstellen von Token verwendet. Während Sie nicht einfach in der Lage sind, "ein Zugriffs-Token für einen Password-Grant-Client auf meinem Controller zu erstellen", können Sie die Anforderung für ein Token mit Route::dispatch an Ihre Passport-Password-Grant-Route weiterleiten.

Um dies zu tun, in der Steuerung Du Token zur Ausgabe verwenden, verwenden Sie die AuthenticatesUsers Eigenschaft, so dass Sie Zugriff auf das Passwort Grant-Route haben, eine Anfrage zu erstellen, und den Versand, die das Passwort Grant-Route anfordern:

use Illuminate\Http\Request; 
use App\Http\Controllers\Controller; 
use Illuminate\Support\Facades\Route; 
use Illuminate\Foundation\Auth\AuthenticatesUsers; 

class IssueTokensController extends Controller 
{ 

    use AuthenticatesUsers; 

    protected function issueApiToken(Request $request) 
    { 
     // forward the request to the oauth token request endpoint 
     $tokenRequest = Request::create(
      '/oauth/token', 
      'post' 
     ); 
     return Route::dispatch($tokenRequest); 
    } 

} 

Diese Methode erfordert natürlich, dass Sie Passport und einen Password Grant Client eingerichtet haben.

wird aus einer anderen Antwort auf eine ähnliche Frage von Raymond Lagonda Diese Antwort basiert - siehe https://stackoverflow.com/a/40433000/4991377

1
Try something like this 
namespace App\Http\Controllers\Api; 

use Illuminate\Http\Request; 
use App\Http\Controllers\Controller; 
use Illuminate\Support\Facades\Route; 
use App\User; 

class UserController extends Controller 
{ 

    //use AuthenticatesUsers; 
    protected function login(Request $request) 
    { 

     $request->request->add([ 
       'grant_type' => 'password', 
       'client_id'  => '3', 
       'client_secret' => '6BHCRpB4tpXnQvC1DmpT7CXCSz7ukdw7IeZofiKn', 
       'scope' => '*' 
      ]); 

     // forward the request to the oauth token request endpoint 
     $tokenRequest = Request::create('/oauth/token','post'); 
     return Route::dispatch($tokenRequest); 
    } 

} 
Verwandte Themen