401 Неавторизован при проверке JWT в Symfony APIPhp

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 401 Неавторизован при проверке JWT в Symfony API

Сообщение Anonymous »

У меня возникла проблема с серверной частью Symfony при попытке проверить токен JWT с помощью запроса POST к моей конечной точке /api/token. Интерфейс React успешно получает токен, но сервер отвечает статусом 401 Unauthorized. Я проверил токен, и он кажется действительным, но сервер отказывается его аутентифицировать.
Вот что у меня есть:
Код интерфейса :
const authenticate = async () => {
const token = Cookies.get('authToken');
console.log('Retrieved Token:', token);

if (token) {
try {
const decodedToken = jwtDecode(token);
console.log('Decoded Token:', decodedToken);

// Check token validity
if (decodedToken && decodedToken.exp) {
const currentTime = Math.floor(Date.now() / 1000);
if (decodedToken.exp < currentTime) {
console.error('The token is expired');
logout();
return false;
}
}

const response = await fetch('https://mysite/api/token', {
method: 'POST',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json',
},
credentials: 'include',
});

if (response.ok) {
setIsAuthenticated(true);
return true;
} else {
console.error('Error validating token on server');
logout();
return false;
}
} catch (error) {
console.error('Error during authentication:', error);
logout();
return false;
}
} else {
console.error('Token is not present');
return false;
}
};

Верхний код:
namespace App\Controller;

use Lexik\Bundle\JWTAuthenticationBundle\Services\JWTTokenManagerInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\Exception\AccessDeniedException;
use Lexik\Bundle\JWTAuthenticationBundle\TokenExtractor\AuthorizationHeaderTokenExtractor;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;

class TokenController extends AbstractController
{
private $jwtManager;

public function __construct(JWTTokenManagerInterface $jwtManager)
{
$this->jwtManager = $jwtManager;
}

/**
* @Route("/api/token", name="api_token", methods={"POST"})
*/
public function handle(Request $request)
{
$tokenExtractor = new AuthorizationHeaderTokenExtractor('Bearer', 'Authorization');
$token = $tokenExtractor->extract($request);

if (!$token) {
throw new AccessDeniedException('Token not found');
}

try {
$jwtTokenData = $this->jwtManager->parse($token);
} catch (\Exception $e) {
error_log('Token parsing error: ' . $e->getMessage());
throw new AccessDeniedException('Invalid token');
}

$userEmail = $jwtTokenData['email'] ?? null;

if (!$userEmail) {
throw new AccessDeniedException('User not found in token');
}

return $this->json(['message' => 'Token validated']);
}

Текущее поведение:
  • Когда я вызываю конечную точку /api/token с действительным токеном, я получаю ошибку 401. Несанкционированный ответ.
  • Токен выглядит правильно сформированным и действительным при декодировании.
Что я сделал Установлено:
  • Процесс генерации токена возвращает действительный токен.
  • Токен правильно включается в заголовок авторизации. .
  • Процессы подписания и проверки используют один и тот же секретный ключ.
Вопросы:
  • Что может быть причиной ответа 401 «Неавторизованный», несмотря на то, что токен выглядит действительным?
  • Необходимы ли какие-либо дополнительные проверки, которые мне следует выполнить для устранения этой проблемы? ?
Редактировать:
Вот мой файл security.yaml:
firewalls:

dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false

# Firewall pour la connexion
api_login:
pattern: ^/api/login
stateless: true
provider: app_user_provider
json_login:
check_path: /api/login
username_path: email
password_path: password
success_handler: lexik_jwt_authentication.handler.authentication_success
failure_handler: lexik_jwt_authentication.handler.authentication_failure

# Firewall pour créer un utilisateur
api_create_user:
pattern: ^/api/createUser
stateless: true

# Firewall pour les API protégées, après l'authentification
api_protected:
pattern: ^/api/protected
stateless: true
jwt: ~

# Firewall général pour le reste des endpoints API
api:
pattern: ^/api
stateless: true
jwt: ~

# Easy way to control access for large sections of your site
# Note: Only the *first* access control that matches will be used
access_control:
- { path: ^/api/login, roles: PUBLIC_ACCESS }
[...]
- { path: ^/api, roles: IS_AUTHENTICATED_FULLY }


А вот моя конфигурация пакета lexik:
lexik_jwt_authentication:
secret_key: '%kernel.project_dir%/config/jwt/private.pem'
public_key: '%kernel.project_dir%/config/jwt/public.pem'
pass_phrase: 'C3c!_Est_uNE_Passphr@se!'
token_ttl: 3600 # in seconds, default is 3600
user_id_claim: "email"

token_extractors:
authorization_header:
enabled: true
prefix: Bearer
name: Authorization

cookie:
enabled: false
name: BEARER


Подробнее здесь: https://stackoverflow.com/questions/790 ... ymfony-api
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • 401 Неавторизован при проверке JWT в Symfony API
    Anonymous » » в форуме Php
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Удаленный сервер вернул ошибку: (401) Неавторизован при запросе данных RestApi.
    Anonymous » » в форуме C#
    0 Ответы
    27 Просмотры
    Последнее сообщение Anonymous
  • Генератор openapi неавторизован 401 через URL-адрес $ref в yaml
    Anonymous » » в форуме JAVA
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • SharePointonline CSOM 401 неавторизован с использованием предоставленного токена доступа
    Anonymous » » в форуме C#
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Удаленный сервер вернул ошибку: (401) Неавторизован в System.net.httpwebrequest.getResponse ()
    Anonymous » » в форуме C#
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Php»