Мое приложение — это одностраничное приложение, использующее Angular 1.x на стороне клиента и Laravel 5.3 для моего сервера / API. Мне легко удалось заставить аутентификацию Auth0 работать на моей клиентской стороне (угловой), и она успешно генерирует токен. Переходя к моему API (laravel), к сожалению, я не могу получить доступ ни к каким маршрутам, защищенным auth0.jwt
промежуточное ПО, хотя заголовок авторизации присутствует. Его ответ представляет собой простой текст, который говорит Unauthorized user
,
Я использую Chrome почтальон, чтобы проверить маршруты на моем API.
Я попытался отследить функцию, отвечающую за ответ, проверив 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, и также клонировал их примеры проектов, просто чтобы убедиться, что конфигурации верны, но, к сожалению, это также не работает. Любые мысли или идеи о том, как я могу решить мою проблему? Заранее спасибо!
У меня такая же проблема. Было 2 вещи, которые мне пришлось изменить, чтобы решить. Благодарим @ Kangoo13 за первое предложение:
1; Убедитесь, что в вашем файле config / laravel-auth0.php secret_base64_encoded = false. Вы увидите, что на панели инструментов Auth0 рядом с вашим ключом указано: «Секрет клиента не закодирован в base64»
'secret_base64_encoded' => false,
2; в том же файле конфигурации, проверьте, что «поддерживается» имеет правильное написание. Может показаться, что кто-то неправильно набрал «suported», если вы только что применили файл конфигурации по умолчанию после запуска composer, скорее всего, это неправильно!
Глядя в JWTVerifier.php, он, кажется, обслуживает неправильно написанный ключ, но по умолчанию будет «HS256», руководство Auth0 прямо заявляет, что вы должны использовать «RS256:
'supported_algs' => ['RS256'],
Надеюсь, это поможет!
Я прочитал suported_algs
вопрос выше, но прочитайте его и пропустили тот факт, что вы должны исправить написание для его работы, потратили дополнительный день, пытаясь выяснить это перед повторным чтением. Надеюсь, следующий человек, который прочтет это, увидит это и не пропустит проблему правописания! Спасибо @ user1286856