webentwicklung-frage-antwort-db.com.de

Immer "Nachricht" erhalten: "Nicht authentifiziert." - Laravel Reisepass

Ich hatte an diesem ganzen Tag viele Anleitungen gefunden. Und mein Setup ist genau das gleiche wie das grundlegende Tutorial da draußen.

Derzeit kann ich auf http://localhost/oauth/token zugreifen, wobei das Token erfolgreich an mich zurückgegeben wurde.

Danach benutze ich ARC (Advanced Rest Client), um zu testen, wie ich meine eigene API anrufe.

Ich hatte Header wie zB übergeben

Authorization: Bearer the_token_here
accept: application/json

Von diesem Header wollte ich nur auf die Standard-API zugreifen, die von laravel /user bereitgestellt wird.

Aber ich bekam immer Antwort von { "message": "Unauthenticated." }

Lesen Sie dieses Tutorial https://itsolutionstuff.com/post/laravel-5-how-to-create-api-authentication- using-passport-example.html

Ich kann mich per Tutorial anmelden, aber ich kann keine Daten über den Endpunkt details abrufen. Es gibt Antwort von { "message": "Unauthenticated." } zurück.

Meine Route von api.php

Route::group(['prefix' => 'v1', 'middleware' => 'auth:api'], function(){
    Route::get('/user', function( Request $request ){
        return $request->user();
    });
});

Es gibt übrigens keine Fehlermeldung in laravel.log und ich hatte den Debug-Modus eingestellt

UPDATE Danke an Kommentar von Mayank

League\\OAuth2\\Server\\Exception\\OAuthServerException: The resource owner or authorization server denied the request. in /.../vendor/league/oauth2-server/src/Exception/OAuthServerException.php:173
Stack trace:
#0 /.../vendor/league/oauth2-server/src/AuthorizationValidators/BearerTokenValidator.php(59): League\\OAuth2\\Server\\Exception\\OAuthServerException::accessDenied('Missing "Author...')
#1 /.../vendor/league/oauth2-server/src/ResourceServer.php(82): League\\OAuth2\\Server\\AuthorizationValidators\\BearerTokenValidator->validateAuthorization(Object(Zend\\Diactoros\\ServerRequest))
#2 /.../vendor/laravel/passport/src/Http/Middleware/CheckClientCredentials.php(46): League\\OAuth2\\Server\\ResourceServer->validateAuthenticatedRequest(Object(Zend\\Diactoros\\ServerRequest))
3
Kasnady

Um eine detaillierte Fehlermeldung über die Ursachen zu erhalten, müssen Sie wie unten beschrieben zu CheckClientCredentials Klassendetails gehen

public function handle($request, Closure $next, ...$scopes)
{
    $psr = (new DiactorosFactory)->createRequest($request);

    try {
        $psr = $this->server->validateAuthenticatedRequest($psr);
    } catch (OAuthServerException $e) {
        error_log($e->getHint()); // add this line to know the actual error
        throw new AuthenticationException;
    }

    $this->validateScopes($psr, $scopes);

    return $next($request);
}

Basierend auf der Fehlermeldung. in meiner Frage.

Die Lösung fügt dies zu .htaccess des Stammordners hinzu (nicht nur innerhalb des Öffentlichen Ordners)

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

Ohne die oben genannte Konfiguration wird der Authorization-Header während des Aufrufs von einer beliebigen Stelle zur App ignoriert. Nach dem Ignorieren kann die Klasse diese Kopfdaten nicht innerhalb der Klasse abrufen

2
Kasnady

Falls jemand dasselbe Problem hat und die gewählte Lösung das Problem nicht löst. Überprüfe das Folgende:

1) Prüfen Sie, ob Sie den X-CSRF-TOKEN im Header der Anforderung senden. In meinem Fall verwende ich vue mit axios:

let token = window.$('meta[name="csrf-token"]').attr('content');
window.axios.defaults.headers.common['X-CSRF-TOKEN'] = token;

Wenn Sie es senden, ändern Sie den folgenden Wert in Vendor/Laravel/Passport/src/Passport.php Zeile 125 (kann sich ändern)

Von wahr bis falsch

public static $unserializesCookies = false;

Das Problem ähnelt möglicherweise dem in https://github.com/laravel/passport/issues/452

Eine Erklärung zur Serialisierung finden Sie in der Ausgabe

0
Emitate