我正在使用Symfony 4.3中的项目。我正在尝试实现OAuth 2.0协议。
一开始,我的应用程序会根据对Google授权服务器的请求获得 access_token 。接下来,我尝试通过Google API确认 access_token ,这没关系。最后,我试图通过应用程序生成JWT令牌,然后问题就此开始。
为此,我已经通过作曲家安装了LexikJWTAuthenticationBundle。我在生成私钥/公钥方面没有任何问题。
为了生成令牌,我使用了部分文档:
我的授权控制器的一部分如下:
public function auth(Request $request, ValidatorInterface $validator, ErrorService $errorService,
JsonFromDbObjectConverter $converter, JWTTokenManagerInterface $JWTManager,
AuthenticationSuccessHandler $handler): JsonResponse
{
/**
* some part of code: confirmation access token by google API
*
*/
$user = $this->getDoctrine()->getRepository(User::class)->findOneBy(['email' => 'kmichalski@trans.eu']);
$token = $JWTManager->create($user);
return $handler->handleAuthenticationSuccess($user, $token);
}
那很好。根据上面的链接,这部分代码应生成事件:Events :: JWT_CREATED,Events :: JWT_ENCODED,Events :: AUTHENTICATION_SUCCESS
在使用邮递员的测试中,我正在获得JWT令牌,如下所示:
问题是当我尝试调用需要JWT令牌的端点时。例如,我打电话给enpoint / companies,我得到了:
您可以看到我粘贴了正确的标题:授权:Bearer eyJ0e ...
下面我显示来自security.yml的配置:
security:
# https://symfony.com/doc/current/security.html#where-do-users-come-from-user-providers
providers:
# used to reload user from session & other features (e.g. switch_user)
app_user_provider:
entity:
class: App\Entity\User
property: email
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
login:
anonymous: true
json_login:
check_path: /auth
success_handler: lexik_jwt_authentication.handler.authentication_success
failure_handler: lexik_jwt_authentication.handler.authentication_failure
api:
pattern: ^/
stateless: true
anonymous: true
guard:
authenticators:
- lexik_jwt_authentication.jwt_token_authenticator
access_control:
- { path: ^/auth, roles: [ IS_AUTHENTICATED_ANONYMOUSLY ] }
- { path: ^/, roles: [IS_AUTHENTICATED_FULLY] }
我的目标是通过/ auth路由对用户进行身份验证,然后我想通过JWT令牌保护其他所有路由,例如/ audits,/ companies和其他路由,但此路由无效。我找不到解决方法。我将不胜感激。
最诚挚的问候