2017-01-27 5 views
1

Мое приложение - одностраничное приложение, использующее Angular 1.x на стороне клиента и Laravel 5.3 для моего сервера/api. Мне легко удалось сделать аутентификацию Auth0 на моей стороне клиента (угловой), и она успешно генерирует токен. Переходя к моему api (laravel), к сожалению, я не могу получить доступ к любым маршрутам, которые защищены промежуточным программным обеспечением auth0.jwt, даже несмотря на наличие заголовка авторизации. Его ответ - это простой текст, который гласит: Unauthorized user.Laravel Auth0 Неавторизованный пользователь

Я использую почтальон Chrome, чтобы проверить маршруты на моем апи. 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

У меня была та же проблема. Мне пришлось изменить все, чтобы решить. Кредит @ Kangoo13 за первое предложение:

1; Убедитесь, что в вашем файле config/laravel-auth0.php указан файл secret_base64_encoded = false. Вы заметите в приборной панели Auth0 рядом с ключом он заявляет, что «Клиент секрет не в кодировке base64»

'secret_base64_encoded' => false, 

2; в том же файле конфигурации, проверьте, что «поддерживается» имеет правильное написание. Казалось бы, кто-то неправильно набрал «suported», если вы только что применили конфигурационный файл по умолчанию после запуска композитора, то вероятность того, что это неправильно!

Глядя в JWTVerifier.php он появляется, чтобы обслужить с орфографической ошибкой ключа, но это будет по умолчанию «HS256», Auth0 руководство явно заявляет вы должны использовать «RS256:

'supported_algs'  => ['RS256'], 

Надежда, что помогает!

1

Я прочитал вопрос suported_algs, но прочитал его и пропустил тот факт, что вам нужно исправить орфографию, чтобы он работал, провел дополнительный день, пытаясь понять это, прежде чем перечитывать. Надеюсь, следующий человек, чтобы прочитать это, видит это и не пропустит проблему правописания! Спасибо @ user1286856