2017-01-27 2 views
1

Meine Anwendung ist eine einzelne Seite App mit Angular 1.x auf der Client-Seite und Laravel 5.3 für meine Server/API. Ich habe es leicht geschafft, die Authentifikation auf meiner Client-Seite (eckig) zu machen und es erzeugt erfolgreich ein Token. Umzug in meine API (Laravel), leider kann ich nicht auf alle Routen zugreifen, die durch die auth0.jwt Middleware geschützt ist, obwohl die Authorization-Header vorhanden ist. Seine Antwort ist ein einfacher Text, der Unauthorized user sagt.Laravel Auth0 Nicht autorisierter Benutzer

Ich benutze Chrome Postman, um die Routen auf meiner API zu testen. Auth0 Middleware route protected calls using Chrome postman

Ich habe versucht, die Funktion aufzuspüren, die für die Antwort durch Prüfen der vendor\auth0\login\src\Auth0\Login\Middleware\Auth0JWTMiddleware.php und fand heraus, dass die CoreException geworfen wird verantwortlich ist.

Hier ist der Griff Methode des Auth0JWTMIddleware:

/** 
    * @param $request 
    * @param \Closure $next 
    * 
    * @return mixed 
    */ 
    public function handle($request, \Closure $next) 
    { 
     $auth0 = \App::make('auth0'); 

     $token = $this->getToken($request); 

     if (!$this->validateToken($token)) { 
      return \Response::make('Unauthorized user', 401); 
     } 

     if ($token) { 
      try { 
       $jwtUser = $auth0->decodeJWT($token); 
      } catch (CoreException $e) { 
       return \Response::make('Unauthorized user', 401); 
      } catch (InvalidTokenException $e) { 
       return \Response::make('Unauthorized user', 401); 
      } 

      // if it does not represent a valid user, return a HTTP 401 
      $user = $this->userRepository->getUserByDecodedJWT($jwtUser); 

      if (!$user) { 
       return \Response::make('Unauthorized user', 401); 
      } 

      // lets log the user in so it is accessible 
      \Auth::login($user); 
     } 

     // continue the execution 
     return $next($request); 
    } 

Mein suspekt ist, dass das Token, das von Auth0 erzeugt neueren Algorithmus oder etwas und das Laravel Auth0 Paket es nicht bereits unterstützt hat.

Ich folgte genau der Dokumentation von Auth0 und ich klonte auch ihre Beispielprojekte, nur um sicherzustellen, dass die Konfigurationen korrekt sind, aber leider funktioniert es auch nicht. Irgendwelche Gedanken oder Ideen, wie kann ich mein Problem lösen? Danke im Voraus!

+0

Hallo, ich hatte das gleiche Problem und ich löste es durch var_dumping der gesamte Prozess, und ich fand es ich musste 'secret_base64_encoded' setzen => falsch, in Laravel-auth0.php, wenn das Ihnen helfen kann ! :) – Kangoo13

Antwort

2

Ich hatte das gleiche Problem. Es gab 2 Dinge, die ich ändern musste, um zu lösen. Kredit an @ Kangoo13 für den ersten Vorschlag:

1; Überprüfen Sie in Ihrer Datei config/laravel-auth0.php, dass secret_base64_encoded = false. Sie werden in Ihrem Auth0-Dashboard neben Ihrem Schlüssel feststellen: "Das Clientgeheimnis ist nicht base64-codiert"

2; Überprüfen Sie in derselben Konfigurationsdatei, ob 'unterstützt' die richtige Schreibweise hat. Es hat den Anschein, dass jemand "Suported" falsch eingegeben hat, wenn Sie nur die Standard-Konfigurationsdatei nach dem Ausführen von Composer angewendet haben, dann ist die Wahrscheinlichkeit groß, dass dies falsch ist!

in JWTVerifier.php sucht es scheint für die falsch geschriebenen Schlüssel gerecht zu werden, aber es wird zu ‚HS256‘, Standard ausdrücklich Auth0 Leitfaden heißt Sie sollten ‚RS256 werden:

'supported_algs'  => ['RS256'], 

Hoffnung, das hilft!

1

Ich lese das suported_algs Problem oben, aber skim las es und verpasste die Tatsache, dass Sie die Rechtschreibung korrigieren müssen, damit es funktioniert, verbrachte einen zusätzlichen Tag, der versucht, es herauszufinden, bevor es erneut liest. Hoffentlich sieht die nächste Person, die es liest, das und vermisst das Rechtschreibproblem nicht! Thanks @ user1286856

Verwandte Themen