Die Hintergrundgeschichte dazu, ich habe aus der Dokumentation zu den Anweisungen gearbeitet: https://laravel.com/docs/5.4/passportLaravel 5.4 401/Unauthenticated mit Reisepass und mehrere Token-Typ
Ich habe
- Laravel 5.4
- „Laravel/Pass ": "^ 3.0" von Komponist
- Local Mac OS X läuft Mamp pro, Php 7.0.15
Ich rufe die Beispielbenutzer Route in Routen/api.php
Route::get('/user', function() {
return 'testing';
})->middleware('auth:api');
Postman curl Header (aus dem Code-Export in Postman gezogen):
CURLOPT_HTTPHEADER => array(
"accept: application/json",
"authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6ImM3ZmI2ZmNmMWFkOGQ0NjFkNTdhMWU2NjFiYjhhOThmOTJhOTBkMDFkNDkwZDFjNDRkNDg5MTdlYjJiZWYyMDlkNjNmOTQwMjIxNTljZWI5In0.eyJhdWQiOiIxIiwianRpIjoiYzdmYjZmY2YxYWQ4ZDQ2MWQ1N2ExZTY2MWJiOGE5OGY5MmE5MGQwMWQ0OTBkMWM0NGQ0ODkxN2ViMmJlZjIwOWQ2M2Y5NDAyMjE1OWNlYjkiLCJpYXQiOjE1MDE3OTQ2NjIsIm5iZiI6MTUwMTc5NDY2MiwiZXhwIjoxNTMzMzMwNjYyLCJzdWIiOiIxIiwic2NvcGVzIjpbImFwaS1hY2Nlc3MiXX0.CPGM4PIKJBeiJvokuDzShz_1CnqHlnFIML-tWoBCn5GcijMXmQkWOHzTI8QwTws2h719TGA4hemXDljjqoZB0LiztAx2JZ3OhjNS-MhrMNujnTJUbvkXAVfcRdybhlDEWof_iboLICQTYNTslX1iw-2DCyFMh8gB4INAKUhpvzA955ALB-ZunKrjSNKdRkgtZRe0t6VyJf9LwzgjIAfSKoi_qRis36KD7hcf0Id_iWZkhvS-ZfuM5eUpzUooUe0rb4rkYYEYndlHlY7-uuZPlzmPMpaJTR4AW1CLkaK5Ic7fde1x1kk2duW_Znd9ki2YBP0kw7ifAmg2DaM5r2-0kEx_1iFuCIxE8QJns1aIm3XjWoOApovt7V6-s3yJZK3xlIDCjFI-C59RHiVSabh-hKdX4elvSL9taSQyuramPZPpsne9SUh4KCWul0iHoNjFdFJEut_TUBWyUPtD3J7gg6P97uRS_THDAUHMo2UYVhlnu9PV8SvbvjGj3OeaaH7ZbzWQCYKbqsLZAZ2mnJlFhTMghbaC2s_MND1zlRm7w9btmihxVW714NUbH8UAwSvrtIYYQ0itevZ59TLiAXprjmjkhiFkrhdX4bUje4uNEbLYawkZI-1o82IExW9D8kCYpOWOZdWTCLgmaE2wXcf-DTCV-9vDWRAdX1YmP4JbRsc",
"cache-control: no-cache",
"content-type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW",
"postman-token: 2ec7a2c8-3489-812d-4638-ebb7dc62aeb1"
),
Ich habe 1 persönlichen Zugriffstoken generiert mit die Vue-Komponenten
Ich habe überprüft, dass ich den Token Ablauf für 1 Jahr setzen und das spiegelt sich in der db.
Mein AuthServiceProvider.php
Passport::routes();
// TODO MAKE THEM LAST A LONG TIME
Passport::tokensExpireIn(Carbon::now()->addYears(20));//You can also use addDays(10)
Passport::refreshTokensExpireIn(Carbon::now()->addYears(20));//You can also use addDays(10)
Passport::pruneRevokedTokens(); //basic garbage collector
Passport::tokensCan([
'api-access' => 'Access Complete API',
]);
Mein RouteServiceProvider.php (mapApiRoutes in der Karte Funktion aufgerufen wird)
protected function mapApiRoutes()
{
Route::group([
'namespace' => $this->namespace,
'prefix' => 'api',
], function ($router) {
require base_path('routes/api.php');
});
}
Meine Kernel.php Route Middle
protected $routeMiddleware = [
'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
];
- BEARBEITEN - NACH WEITERER FORSCHUNG
Ich benutze Postbote, um meine API-Auth zu testen und jedes Mal, wenn ich es versuche, eine 401 zu bekommen. Ich habe versucht, Personal Access Client und Password Grant Client und beide haben das gleiche Problem. Nachdem ich sie beide betrachtet hatte, erkannte ich, dass beide das Autorisierungsträger-Token-Format verwenden.
So begann ich Logging in verschiedenen Dateien in Passport-Quelle.
Im TokenGuard.php
public function user(Request $request) {
Log::info('TokenGuard: '. $request);
if ($request->bearerToken()) {
return $this->authenticateViaBearerToken($request);
} elseif ($request->cookie(Passport::cookie())) {
return $this->authenticateViaCookie($request);
}
}
Das Log sieht wie folgt aus:
[2017-08-10 20:50:20] local.INFO: TokenGuard 93: GET /api/user HTTP/1.1
Accept: application/json
Accept-Encoding: gzip, deflate
Cache-Control: no-cache
Connection: keep-alive
Content-Type: application/json
Host: url.com:8888
Postman-Token: 66707fe5-8f6e-4920-948b-2804a76d4a65
User-Agent: PostmanRuntime/6.2.5
[2017-08-10 20:50:20] local.INFO: TokenGuard 93: GET /api/user HTTP/1.1
Accept: application/json
Accept-Encoding: gzip, deflate
Cache-Control: no-cache
Connection: keep-alive
Content-Type: application/json
Host: url.com:8888
Postman-Token: 66707fe5-8f6e-4920-948b-2804a76d4a65
User-Agent: PostmanRuntime/6.2.5
Das, was fehlt, der Bearer [token] Teil des Antrags ist. Der TokenGuard-Code-Chunk führt ein if/else aus. Hier denke ich, dass der Fehler passiert.
Sollte das nicht auch protokolliert werden? Da das Bearer Token fehlt, schlägt das If/Else fehl, und dann ist es sinnvoll, eine 401.
Warum sollte mein Token aus der Anfrage entfernt werden.
Wie bekommen Sie Ihr Token in JavaScript?Das Token im obigen Codebeispiel scheint zu lang zu sein. Sind Sie sicher, dass Sie das verschlüsselte Cookie nicht kopiert haben? – Kyslik
Wenn Sie das persönliche Zugriffstoken erstellen, ruft die Vue-Komponente ein Modal auf, in dem sich das Token befindet. Ich habe es kopiert und dann benutzt. Ich habe es drei Mal versucht, um sicherzustellen, dass ich das nicht vermassele. –
Ihre einzige Option ist es, diese selbst zu debuggen, relevante Dateien (sogar Laravel-Einsen) mit '\ Log :: info ...' Anweisungen zu modifizieren und selbst zu sehen, in welchem Punkt Sie stecken bleiben. Habe Spaß! – Kyslik