以编程方式配置LEXIK JWT

时间:2019-07-11 21:19:30

标签: php symfony oauth-2.0 lexikjwtauthbundle

我正在使用Symfony 4.3中的项目。我正在尝试实现OAuth 2.0协议。

一开始,我的应用程序会根据对Google授权服务器的请求获得 access_token 。接下来,我尝试通过Google API确认 access_token ,这没关系。最后,我试图通过应用程序生成JWT令牌,然后问题就此开始。

在图形上,它可以显示为: enter image description here

为此,我已经通过作曲家安装了LexikJWTAuthenticationBundle。我在生成私钥/公钥方面没有任何问题。

为了生成令牌,我使用了部分文档:

https://github.com/lexik/LexikJWTAuthenticationBundle/blob/master/Resources/doc/7-manual-token-creation.md

我的授权控制器的一部分如下:

    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令牌,如下所示:

enter image description here

问题是当我尝试调用需要JWT令牌的端点时。例如,我打电话给enpoint / companies,我得到了:

enter image description here

您可以看到我粘贴了正确的标题:授权: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和其他路由,但此路由无效。我找不到解决方法。我将不胜感激。

最诚挚的问候

0 个答案:

没有答案