无法在 Symfony 3.4 上使用 LexikJWTAuthenticationBundle 进行身份验证
not able to authenticate with LexikJWTAuthenticationBundle on Symfony 3.4
在我使用 FOSUserBundle (2.0.2) 的 Symfony (3.4.24) 项目中,我安装了 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"}
任何人都可以指出正确的方向来解决这个问题吗?
一切似乎都很好,但我怀疑,因为您有两个提供程序(in_memory 和 fos_userbundle),Lexik JWT 从他们中的哪一个查找凭据?如果您不使用 in_memory 提供程序,您应该尝试将其删除。
在我使用 FOSUserBundle (2.0.2) 的 Symfony (3.4.24) 项目中,我安装了 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"}
任何人都可以指出正确的方向来解决这个问题吗?
一切似乎都很好,但我怀疑,因为您有两个提供程序(in_memory 和 fos_userbundle),Lexik JWT 从他们中的哪一个查找凭据?如果您不使用 in_memory 提供程序,您应该尝试将其删除。