2017-01-27 5 views
1

私のアプリケーションは、クライアント側でAngular 1.xを使用し、サーバー/ apiでLaravel 5.3を使用する単一ページアプリケーションです。クライアント側(角)でAuth0認証を簡単に管理でき、トークンが正常に生成されました。私のAPI(laravel)に移動すると、残念ながらAuthorizationヘッダーが存在してもauth0.jwtミドルウェアで保護されているルートにはアクセスできません。その応答はUnauthorized userという単純なテキストです。Laravel Auth0権限のないユーザー

私はChromeのpostmanを使用して、私のAPI上のルートをテストしています。 Auth0 Middleware route protected calls using Chrome postman

私はvendor\auth0\login\src\Auth0\Login\Middleware\Auth0JWTMiddleware.phpをチェックして応答する責任がある機能をダウン追跡しようとしたとCoreExceptionがスローされていることが分かりました。ここで

は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); 
    } 

私容疑者はAuth0から生成トークンは、新しいアルゴリズムか何かとLaravel Auth0パッケージがすでにそれをサポートしていないということです。

私はAuth0で提供されているドキュメントに正確に従いました。また、サンプルプロジェクトをクローンして構成が正しいことを確認しましたが残念ながらそれも機能しません。どのように私の問題を解決することができますか?前もって感謝します!

+0

こんにちは、私は同じ問題を抱えていましたが、全体のプロセスをvar_dumpingして解決しましたが、私は 'secret_base64_encoded' => false、laravel-auth0.php ! :) – Kangoo13

答えて

2

私は同じ問題がありました。解決するために変えなければならなかった2つのことがありました。最初の提案について@ Kangoo13に寄付:

1;あなたのconfig/laravel-auth0.phpファイルでsecret_base64_encoded = falseであることを確認してください。あなたのAuth0ダッシュボードに、あなたのキーの横に「クライアントの秘密はbase64でエンコードされていません」というメッセージが表示されます。

'secret_base64_encoded' => false, 

2;同じ設定ファイルで、 'supported'が正しいスペルを持っていることを確認してください。誰かが誤って "suported"と入力したように見えますが、作曲家を実行した後にデフォルトの設定ファイルを適用しただけでは、これが間違っている可能性があります!

JWTVerifier.phpで、スペルミスキーに対応するために見えるんが、それは「HS256」にデフォルト設定されます見ると、Auth0ガイドが明示的に「RS256を使用する必要があります状態:

'supported_algs'  => ['RS256'], 

希望に役立ちます!

1

上記のsuported_algsの問題を読んだが、それを読んで、スペルを修正する必要があるという事実を忘れて、再読する前にそれを理解しようと余分な一日を費やした。うまくいけば、それを読む次の人はこれを見て、スペルの問題を見逃すことはありません!ありがとう@ user1286856

関連する問題