не удалось пройти аутентификацию с помощью LexikJWTAuthenticationBundle на Symfony 3.4

В моем проекте Symfony (3.4.24) с FOSUserBundle (2.0.2) я установил LexikJWTAuthenticationBundle (2.6.3).

Я установил и настроил все, как сказано на странице github. При выполнении следующей предложенной команды curl

curl -X POST -H "Content-Type: application/json" http://127.0.0.1:8000/app_dev.php/api/login_check -d "{\"username\":\"johndoe\",\"password\":\"test\"}"

Я всегда получаю следующий ответ 401. Ответ одинаков для несуществующего пользователя или неправильного пароля, а также для существующего действительного пользователя с правильным паролем.

{"code":401,"message":"Bad credentials"}

Моя установка следующая:

config.yml: (если мне нужно добавить дополнительные сведения, дайте мне знать)

lexik_jwt_authentication:
    secret_key:       "%kernel.root_dir%/config/jwt/private.pem" # required for token creation
    public_key:       "%kernel.root_dir%/config/jwt/public.pem"  # required for token verification
    pass_phrase:      "%jwt_key_pass_phrase%" # required for token creation, usage of an environment variable is recommended
    token_ttl:        "%jwt_token_tll%"

security.yml:

    encoders:
        FOS\UserBundle\Model\UserInterface: bcrypt

    ...

    providers:
        in_memory:
            memory: ~
        fos_userbundle:
            id: fos_user.user_provider.username_email

    firewalls:
        # disables authentication for assets and the profiler, adapt it according to your needs
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false

        # Login for Lexik Json Web Token Authentication
        login:
            pattern:  ^/api/login
            stateless: true
            anonymous: true
            json_login:
                check_path:               /api/login_check
                success_handler:          lexik_jwt_authentication.handler.authentication_success
                failure_handler:          lexik_jwt_authentication.handler.authentication_failure
                require_previous_session: false

        # API for Lexik Json Web Token Authentication
        api:
            pattern:   ^/api
            stateless: true
            guard:
                authenticators:
                    - lexik_jwt_authentication.jwt_token_authenticator

        main:
            pattern: ^/
            form_login:
                provider:                       fos_userbundle
                check_path:                     fos_user_security_check
                login_path:                     fos_user_security_login
                csrf_token_generator:           security.csrf.token_manager
                default_target_path:            fos_user_profile_show
                always_use_default_target_path: true
            logout:
                  path:                         fos_user_security_logout
                  target:                       default_loged_out_target
            logout_on_user_change: true
            anonymous:    true
            switch_user:
                role:       ROLE_ADMIN
                provider:   fos_userbundle
            remember_me:
                secret:   '%secret%'
                lifetime: 15552000
                path:     /

    access_control:
        ...
        - { path: ^/api/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/api,       roles: IS_AUTHENTICATED_FULLY }

routing.yml:

...
api_login_check:
    path: /api/login_check

Итак, как я уже сказал, я всегда получаю этот ответ:

{"code":401,"message":"Bad credentials"}

Может ли кто-нибудь указать в правильном направлении, как это исправить?


person user3440145    schedule 03.05.2019    source источник


Ответы (1)


Вроде бы все в порядке, но я подозреваю, что поскольку у вас есть два провайдера (in_memory и fos_userbundle), у какого из них Lexik JWT ищет учетные данные? Если вы не используете поставщика in_memory, попробуйте его удалить.

person stephan.mada    schedule 03.05.2019
comment
Спасибо. Хорошо, это меняет что-то ^^ Теперь я получаю ошибку 500 и html-страницу с ошибкой Symfony, в которой говорится, что невозможно создать подписанный JWT из данной конфигурации. Это... по-другому, но я до сих пор не знаю, что делать :-) - person user3440145; 03.05.2019
comment
Сообщение об ошибке достаточно ясное, вы должны проверить свою конфигурацию. Возможно, регенерируя ваши SSH-ключи. - person stephan.mada; 03.05.2019
comment
Для меня не так ясно (регенерация ключей не помогла), но на самом деле это другая проблема. Однако знаете ли вы, как решить первоначальную проблему с помощью поставщика in_memory? - person user3440145; 03.05.2019
comment
Регенерация ключей на самом деле СДЕЛАЛА трюк. Я восстановил их, но не в ту папку... Дальше комментировать не буду :D - person user3440145; 03.05.2019