LexikJWTAuthenticationBundle всегда отклоняет токены JWT при использовании кодировщика веб-токенов.Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 LexikJWTAuthenticationBundle всегда отклоняет токены JWT при использовании кодировщика веб-токенов.

Сообщение Anonymous »

Я пытаюсь настроить LexikJWTAuthenticationBundle для использования в проекте на основе платформы API.
Этот API добавляется в существующий проект, использующий Sulu CMS (2.6.2). и Symfony (6.4.7). Я использую PHP 8.3, у меня установлен и включен OpenSSL.
Я хотел бы иметь возможность использовать функцию веб-токена LexikJWTAuthenticationBundle. Мне удалось заставить работать следующую конфигурацию, основанную на настройках пакета по умолчанию:
lexik_jwt_authentication:
secret_key: '%env(resolve:JWT_SECRET_KEY)%'
public_key: '%env(resolve:JWT_PUBLIC_KEY)%'
pass_phrase: '%env(JWT_PASSPHRASE)%'
api_platform:
enabled: true
check_path: /api/login_check
username_path: username
password_path: password
encoder:
service: lexik_jwt_authentication.encoder.lcobucci
signature_algorithm: ES512
token_ttl: 3600
allow_no_expiration: false
clock_skew: 0
user_id_claim: username
token_extractors:
authorization_header:
enabled: true
prefix: Bearer
name: Authorization
cookie:
enabled: false
name: BEARER
query_parameter:
enabled: false
name: bearer
split_cookie:
enabled: false
cookies: { }
remove_token_from_body_when_cookies_used: true
set_cookies: { }

Я следовал документации по настройке функции веб-токена. К сожалению, все портится, как только я перехожу на использование lexik_jwt_authentication.encoder.web_token. Токены JWT всегда недействительны.
Я написал собственную службу поставщика пользователей, чтобы избежать конфликтов с Sulu, и проверил, что она работает с кодировщиком пакета по умолчанию.
Моя конфигурация пакета после перехода на кодировщик веб-токенов:
lexik_jwt_authentication:
secret_key: '%env(resolve:JWT_SECRET_KEY)%'
public_key: '%env(resolve:JWT_PUBLIC_KEY)%'
pass_phrase: '%env(JWT_PASSPHRASE)%'
api_platform:
enabled: true
check_path: /api/login_check
username_path: username
password_path: password
encoder:
service: lexik_jwt_authentication.encoder.web_token
signature_algorithm: ES512
token_ttl: 3600
allow_no_expiration: false
clock_skew: 0
user_id_claim: username
token_extractors:
authorization_header:
enabled: true
prefix: Bearer
name: Authorization
cookie:
enabled: false
name: BEARER
query_parameter:
enabled: false
name: bearer
split_cookie:
enabled: false
cookies: { }
remove_token_from_body_when_cookies_used: true
set_cookies: { }
access_token_issuance:
enabled: true
signature:
algorithm: ES512
key: # key
access_token_verification:
enabled: true
signature:
allowed_algorithms:
- ES512
keyset: # keyset
header_checkers: { }
claim_checkers:
- exp_with_clock_skew
- iat_with_clock_skew
- nbf_with_clock_skew
mandatory_claims: { }
blocklist_token:
enabled: false
cache: cache.app

Как я запрашиваю токен:
curl -X POST http://localhost/api/login_check \
-H "Content-Type: application/json" \
-d '{"username":"someusername","password":"somepassword"}'

Запрос, который я делаю после получения токена:
curl -H "Authorization: Bearer " http://localhost/api/some-endpoint/4

Мне удалось отследить проблему вплоть до этапа загрузки и декодирования токена. Он правильно десериализован и разбит на массив. После этого момента он терпит неудачу. Это заставляет меня подозревать, что возникла проблема с кодировкой моих ключей, но я не уверен, что делаю неправильно.
Я использовал web-token/jwt-bundle для генерации ключей, и я попробовал использовать автономное приложение JWT. Я проанализировал результаты с помощью команд пакета key:analyze и keyset:analyze. Кажется, они правы. И я просмотрел здесь связанные вопросы, чтобы узнать, была ли у кого-то подобная проблема. К сожалению, это не помогло.
Я был бы очень признателен за любую информацию по этому поводу. Я определенно врезался в стену. Заранее спасибо!
РЕДАКТИРОВАТЬ: После некоторой отладки выяснилось, что шифрование является обязательным для этого пакета при использовании функции веб-токена, хотя в документации указано, что шифрование является обязательным для этого пакета. в противном случае. Поскольку у меня не было настроено шифрование, все мои запросы с использованием токена отклонялись из-за неопределенного алгоритма.
Шифрование работает, а расшифровка — нет. Он доходит до части процесса расшифровки, а затем терпит неудачу. Итак, я все еще получаю ответ «Неверный токен JWT».
Моя полная конфигурация с включенным шифрованием:
lexik_jwt_authentication:
secret_key: '%env(resolve:JWT_PRIVATE_KEY)%'
public_key: '%env(resolve:JWT_PUBLIC_KEY)%'
pass_phrase: '%env(JWT_PASSPHRASE)%'
api_platform:
enabled: true
check_path: /api/login_check
username_path: username
password_path: password
encoder:
service: lexik_jwt_authentication.encoder.web_token
signature_algorithm: ES512
token_ttl: 3600
allow_no_expiration: false
clock_skew: 0
user_id_claim: username
token_extractors:
authorization_header:
enabled: true
prefix: Bearer
name: Authorization
cookie:
enabled: false
name: BEARER
query_parameter:
enabled: false
name: bearer
split_cookie:
enabled: false
cookies: { }
remove_token_from_body_when_cookies_used: true
set_cookies: { }
access_token_issuance:
enabled: true
signature:
algorithm: ES512
key: # key
encryption:
enabled: true
key_encryption_algorithm: RSA-OAEP-256
content_encryption_algorithm: A256CBC-HS512
key: # key
access_token_verification:
enabled: true
signature:
allowed_algorithms:
- ES512
keyset: # keyset
header_checkers: { }
claim_checkers:
- exp_with_clock_skew
- iat_with_clock_skew
- nbf_with_clock_skew
mandatory_claims: { }
encryption:
enabled: true
continue_on_decryption_failure: false
header_checkers:
- iat_with_clock_skew
- nbf_with_clock_skew
- exp_with_clock_skew
allowed_key_encryption_algorithms:
- RSA-OAEP-256
allowed_content_encryption_algorithms:
- A256CBC-HS512
keyset: # keyset
blocklist_token:
enabled: false
cache: cache.app


Подробнее здесь: https://stackoverflow.com/questions/785 ... token-enco
Ответить

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

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

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

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

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