Laravel Passport Api mit client-credentials-grant-tokens​​ "von postman zur real world"

  • Hi,

    ich möchte eine Rest Api bereitstellen. Der Zugriff soll via client-credentials-grant-tokens erfolgen. Das läuft auch schon soweit und ich habe es erfolgreich mit Postman getestet.

    D.h. ich poste client_id und client_credential an /oauth/token und erhalte den access_token. Mit diesem access_token kann ich dann auf den endpoint zugreifen.

    Wenn ich es richtig verstanden habe, muss ich nun dafür sorgen, wenn der consumer, mit den von mir bereitgestellten clientcredentials, auf den endpoint zugreift, die Schleife über oauth/token mache, damit der access_token vorliegt und auf die ressource zugegriffen werden kann. Ist das dass mit dem callback und guzzle u.s.w.? Wenn das so ist, nur wo mache ich das genau, in der route, im controller. Die Tutorials, die ich gefunden haben, enden meistens bei Postman. Ich müsste ja dann auch simulieren können über Postman, dass ich nur client_id und client_credential an den endpoint sende und ich die ressource zurückbekomme?


    Oder habe ich das falsch komplett verstanden. Kümmert sich der consumer drum, der sich den access_token "selber besorgt" also bei sich aufnimmt und einen zweiten Aufruf an den endpoint macht? Wie läuft das typischerweise in der Praxis. Die Anforderung lautet: "If you have already OAuth2 endpoint authentication, please provide us details to your authentication process like clientId,clientSecret and grandType. (Also von machine to machine ohne user):

    Eine Randfrage noch zum Unterschied zwischen php artisan passport:client und php artisan passport:client --client. Ich weiß, ohne Option --client wird auch ein user zugeordnet und er callback Pfad abgefragt. Wenn man den callback braucht ist ohnehin klar. Den user bräuchte ich eigentlich nicht.


    Also, die Fragen sind, brauch ich callback. Wenn ja, wo füge ich den genau, sodass am ende der controller sein arbeit macht, von machine to machine. Und gibt es evtl. dafür ein Bsp./Tutorial, nicht nur die snippets.


    Danke, Gruß Kai


  • Bin bereits weiter gekommen, quasi eine Lösung, zu der ich gerne Eure Meinung hören würde. Folgende ist die Route, die bereits mit Postman funktionierte (mein Test Model heißt cars). Wie oben beschrieben, hier muss der access_token mitgeben werden.

    Code
    Route::group(['prefix' => 'v1', 'as' => 'api.', 'namespace' => 'Api\V1\Admin', 'middleware' => ['client']], function () {
    // Cars
    Route::apiResource('cars', 'CarApiController');
    });

    Und nun habe ich alles in der route angepasst (api.php).

    Das funktioniert auch. Nun stellen sich mir folgende Fragen:

    Macht man das so, macht man das in der route oder doch woanders, im controller oder beides?

    Geht es noch eleganter?

    Die /oauth/callback/cars route lautet anders als der endpoint, hm.

    Fehlen Sicherheitsfeatures? Muss da noch ein state abgechecked werden?

    Was ist, wenn es mehr wird?

    Was meint Ihr?

  • Hallo Kai,


    also grundsätzlich kannst Du das natürlich machen wie Du willst... aber Du kannst ja in Deiner Route auf den Controller verweisen und den Code dort in eine Funktion packen...
    Gerade bei größeren Programmen mit ggf. mehreren Schnittstellen wäre das sicherlich übersichtlicher...

    Also:


    Code
    Route::post('/oauth/callback/cars', 'apicontroller@carsapi')->name('api.cars');

    Den Rest dann in den Controller...


    viele Grüße


    Ben