1
votes

L'appel de l'API Laravel Passport renvoie toujours non authentifié

J'ai donc configuré mon API avec Passport et j'ai essayé de faire une requête GET pendant près d'une semaine maintenant, mais j'ai toujours la réponse ci-dessous:

 public static function tokensExpireIn(DateTimeInterface $date = null)
{
    if (is_null($date)) {
        return static::$tokensExpireAt
                        ? Carbon::now()->diff(static::$tokensExpireAt)
                        : new DateInterval('P1Y');
    }

    static::$tokensExpireAt = $date;

    return new static;
}

Voici ma configuration:

Auth.php

# Handle Authorization Header
 RewriteCond %{HTTP:Authorization} .
 RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

AuthServiceProvider.php

public function callback(Request $request)
{
     $http = new Client();
    $token_url=url('oauth/token');

$response = $http->post($token_url, [
    'form_params' => [
        'grant_type' => 'password',
        'client_id' => $this->client_id,
        'client_secret' => $this->client_secret,
        'username'=>'my-username',
        'password'=>'my-password',
        'scope' =>'*',
    ],
]);

return json_decode((string) $response->getBody(), true);
}

RouteServiceProvider

 protected function mapApiRoutes()
{
    Route::prefix('api')
         ->middleware('auth:api')
         ->namespace($this->namespace)
         ->group(base_path('routes/api.php'));
}


0 commentaires

3 Réponses :


0
votes

Essayez de créer un nouveau client d'octroi de mot de passe avec:

What should we name the password grant client? [Laravel Password Grant Client]:
 > 

Password grant client created successfully.
Client ID: 4
Client secret: WlRYEbA5lt5esbi0MuFyJPzPDmHDGsk3iC5QGw7d

Vous obtiendrez un résultat comme:

php artisan passport:client --password

Utilisez ces informations d'identification pour remplissez votre identifiant client et votre secret. Les informations d'identification client standard créées via l'interface du composant Vue ne fonctionnent pas pour les octrois de mot de passe.


1 commentaires

Exactement ce que j'ai fait @matticistard. J'ai fini par créer mon propre middleware pour authentifier mes demandes.



0
votes

Le problème est de savoir comment vous vous authentifiez et quel jeton vous utilisez.

Il y a 2 façons de générer un jeton

  1. Les utilisateurs se connectent et vous utilisez create token pour obtenir le token si l'utilisateur est authentifié.
  2. Générez un client et utilisez les itinéraires prédéfinis par passeport pour obtenir un jeton

Maintenant, dans les routes API, vous devez dire dans votre méthode comment vous vous authentifiez par exemple

// Below one is for the User token  
Route::get('/test', 'Api\TestController@index')->middleware('auth:api');
// Below one is for authenticating Client token  
Route::get('/test', 'Api\TestController@index')->middleware('client_credentials');

Et n'oubliez pas si vous utilisez l'authentification client, vous devez ajouter la ligne ci-dessous dans routemiddleware dans App / http / kernel.php

'client_credentials '=> \ Laravel \ Passport \ Http \ Middleware \ CheckClientCredentials :: class

J'espère que cela résout les problèmes


0 commentaires

0
votes

essayez de commenter les middlewares dans le groupe de middlewares api (app / HTTP / Kernel.php)

protected function mapApiRoutes()
    {
        Route::prefix('api')
             // ->middleware('api')
             ->namespace($this->namespace)
             ->group(base_path('routes/api.php'));
    }

Ou commentez le groupe de middlewares api dans app / Providers / RouteServiceProvider.php

    protected $middlewareGroups = [
        'web' => [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\Session\Middleware\StartSession::class,
            // \Illuminate\Session\Middleware\AuthenticateSession::class,
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
            \App\Http\Middleware\VerifyCsrfToken::class,
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
            \Laravel\Passport\Http\Middleware\CreateFreshApiToken::class,
        ],

        'api' => [
//            'throttle:60,1',
//            \Illuminate\Routing\Middleware\SubstituteBindings::class,
        ],
    ];


0 commentaires