Настройте LEXIK JWT программно - PullRequest
0 голосов
/ 12 июля 2019

Я работаю с проектом в Symfony 4.3.Я пытаюсь реализовать протокол OAuth 2.0.

В начале мое приложение получает access_token на основе запроса к серверу авторизации Google.Затем я пытаюсь подтвердить access_token с помощью Google API, и это нормально.Наконец, я пытаюсь сгенерировать токен 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

В тестах с использованием Postman я получаю токен 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, а затем я хотел бы защитить все остальные маршруты, такие как / audits/ компании и другие по токену JWT, но это не работает.Я не могу найти решение.Буду благодарен за помощь.

С уважением

...