我正在使用jwt(LexikJWTAuthenticationBundle)创建symfony API(API平台)
登录工作得很好。我把这个添加到了安全性中。yaml
login:
pattern: ^/api/login
stateless: true
json_login:
check_path: /api/login_check
success_handler: lexik_jwt_authentication.handler.authentication_success
failure_handler: lexik_jwt_authentication.handler.authentication_failure
服务器将令牌返回给我。但是当我创建安全源时,
- { path: ^/api/notes, roles: IS_AUTHENTICATED_FULLY }
并发送带有令牌的请求,令牌具有类似于
Bearer --token--
服务器忽略它并返回“需要完全身份验证才能访问此资源”。
我怎么能认识到哪里出了问题呢?我花了5个小时和它在一起,但我不知道,我能做些什么。
I使用symfony服务器运行服务器:启动
当我创建测试控制器时
#[Route('/test', name: 'test')]
public function index(Request $request): Response
{
$auth = $request->headers->get("Authorization");
return new Response("Authorization: ". "'".$auth."'");
}
它工作,服务器打印我的令牌
Authorization: 'Bearer eyJ0eXAiOiJKV1QiLCJh.....'
2条答案
按热度按时间5t7ly7z51#
我认为您遗漏了一些配置。您只配置了json_login选项,因此Lexik包现在负责处理您的用户的登录和发布JWT。默认情况下,API平台仍将基于基于会话的cookie来验证请求,而不是通过Authorization头。您必须告诉API平台基于您的JWT来验证请求。
我相信把这个加到你的
security.yml
中就足够了,但是我还没有检查这个:(drop
pattern
,将login
更改为json_login
并添加jwt: ~
)请查看此文档:https://api-platform.com/docs/core/jwt/,其中显示了如何使用JWT保护API平台。
j2cgzkjk2#
我有同样的问题API平台由Sylius和第二个GraphQL API
/api/v2/graphql
(除了Api平台REST API/api/v2
)。在Symfony探查器中,已对graphQL请求禁用安全部分。
graphql端点需要自己的防火墙:
以
security.yaml
为单位