Symfony 我得到一个无效的令牌?

Symfony 我得到一个无效的令牌?,symfony,jwt,Symfony,Jwt,我在一个Docker项目下工作。Symfony 5 注册进展顺利,我已经在数据库中注册了用户 连接顺利,我拿到了令牌 在连接过程中,auth表中有一个带有令牌的记录行 另一方面,对受保护路由的访问表明令牌无效 得到http://localhost:8003/api/users/13 授权持有人 { "code": 401, "message": "Invalid JWT Token" } security.yml

我在一个Docker项目下工作。Symfony 5

  • 注册进展顺利,我已经在数据库中注册了用户
  • 连接顺利,我拿到了令牌
  • 在连接过程中,auth表中有一个带有令牌的记录行
  • 另一方面,对受保护路由的访问表明令牌无效
得到http://localhost:8003/api/users/13
授权持有人

{
    "code": 401,
    "message": "Invalid JWT Token"
}
security.yml

安全性:
编码器:
应用程序\实体\用户:
算法:bcrypt
供应商:
应用程序\用户\提供商:
实体:
类别:应用程序\实体\用户
物业:电邮
防火墙:
刷新:
模式:^/api/token/refresh
无国籍:正确
匿名:是的
开发人员:
模式:^/((探查器wdt)| css |图像| js)/
安全性:错误
文件:
模式:^/doc
安全性:错误
登录:
模式:^/api/login
无国籍:正确
匿名:是的
json_登录:
用户名\路径:电子邮件
检查路径:/api/login/token
成功\u处理程序:lexik\u jwt\u authentication.handler.authentication\u成功
失败\u处理程序:lexik\u jwt\u authentication.handler.authentication\u失败
用户注册:
模式:^/api/user/register
无国籍:正确
匿名:是的
主要内容:
模式:^/api
无国籍:正确
匿名:错
提供者:应用程序\用户\提供者
警卫:
认证者:
-lexik_jwt_authentication.jwt_token_authenticator
访问控制:
-{path:^/api/token/refresh,角色:是否进行匿名身份验证}
-{path:^/api/login,角色:是否进行匿名身份验证}
-{路径:^/api/user/register,角色:是否通过匿名身份验证}
-{path:^/api/,roles:IS\u AUTHENTICATED\u FULLY}
lexik_jwt_authentication.yaml

lexik_jwt_认证:
私有密钥路径:“%kernel.project\u dir%/%env(JWT\u私有密钥路径)%”
公共密钥路径:“%kernel.project\u dir%/%env(JWT\u公共密钥路径)%”
通过短语:“%env(JWT\u密码短语)%”
令牌ttl:3600#令牌ttl以秒为单位,默认为1小时
用户\标识\字段:电子邮件
时钟偏移:0
编码器:
服务:lexik_jwt_authentication.encoder.lcobucci
签名算法:RS256
令牌提取程序:
授权单元标题:
已启用:true
前缀:持票人
名称:授权书
曲奇:
已启用:false
姓名:持票人
查询参数:
已启用:false
姓名:持票人
我已使用正确的密码短语创建了2个证书:

环境署署长

。。。
JWT\u SECRET\u KEY=%kernel.project\u dir%/config/JWT/private.pem
JWT\u PUBLIC\u KEY=%kernel.project\u dir%/config/JWT/PUBLIC.pem
JWT_密码短语=f8bfe4494b7cf3032d642a3e72dcac53
/config/jwt/private.pem
/config/jwt/public.pem

\供应商\Lexik\Bundle\JWTAuthenticationBundle\Security\Guard\JWTTokenAuthenticator.php

公共函数getCredentials(请求$Request) { $tokenExtractor=$this->getTokenExtractor(); if(!$tokenExtractor实例tokenExtractor接口){ 抛出新的\RuntimeException(sprintf('方法“%s::getTokenExtractor()”必须返回“%s.”、\uuuuu类、令牌提取器接口::类)的实例); } if(false==($jsonWebToken=$tokenExtractor->extract($request))){ 返回; } $preAuthToken=新的PreAuthenticationJWTUserToken($jsonWebToken); 试一试{ 转储($preAuthToken);//-------------- dump($this->jwtManager->decode($preAuthToken));//此处出错 // -------------- 如果(!$payload=$this->jwtManager->decode($preAuthToken)){ 抛出新的InvalidTokenException(“无效JWT令牌”); } $preAuthToken->setPayload($payload); }捕获(JWTDecodeFailureException$e){ 如果(JWTDecodeFailureException::EXPIRED_令牌===$e->getReason()){ $expiredTokenException=新的expiredTokenException(); $expiredTokenException->setToken($preAuthToken); 抛出$expiredTokenException; } 抛出新的InvalidTokenException('Invalid JWT Token',0,$e); } 返回$preAuthToken; } 转储(预授权令牌)

第106行的JWTTokenAuthenticator.php: Lexik\Bundle\JWTAuthenticationBundle\Security\Authentication\Token\PreAuthenticationJWTUserToken{598 -rawToken:“Eyj0Exaiioijkv1qiljHbGCioijiuzi1nij9.Eyj1c2vyawqiojillc1c2vYbmfTzSi6inVdG8xMub0b3rVzyIiIiIawf0ijOxnjiyMDI3nzQ4fq.COr_fuxah8IQ3ECr8mVivdli6h5zV7419gVqly6q” -有效载荷:空 -凭据:空 -guardProviderKey:null -用户:空 -角色名称:[] -认证:假 -属性:[] }
  • 这是请求中传递的正确令牌
此行出现错误:
$this->jwtManager->decode($preAuthToken)


和触发器:
new InvalidTokenException('Invalid JWT Token',0,$e)

您使用的是哪个版本的LexikJWT身份验证?我想最新的symfony 5,您应该使用param公钥而不是公钥路径

您试图解决什么问题?在几天前看到类似的问题后,我可以建议启动XDebug来逐步完成代码-它的结构非常好:)我找不到问题:(您的env变量对吗?您似乎在两个位置添加
kernel.project_dir
(尽管您显示的变量名称不同).那么,您试图解决什么问题?启动了调试器?我修改了.env,甚至尝试了硬值。调试器没有显示任何内容