Использование symfony LoginFormAuthenticator с lexik_jwt_authentication для обработки пользователя-администратора и токена API - PullRequest
0 голосов
/ 22 марта 2020

Я хочу создать пользователя-администратора для обработки бэк-энда и использовать токен jwt для защиты моих маршрутов API.

В своем файле security.yaml я добавляю главный брандмауэр для обработки аутентификации в форме входа:

 main:
            anonymous: lazy
            provider: app_user_provider
            guard:
                authenticators:
                    - App\Security\LoginFormAuthenticator
            logout:
                path: app_logout

и контроль доступа к i-конфигурации:

- { path: '^/admin', roles: ROLE_ADMIN }
- { path: ^/login$, roles: IS_AUTHENTICATED_ANONYMOUSLY }

Теперь, если я использую форму входа, я могу войти как администратор:

sign in

admin controller

После входа я могу получить доступ к административному контроллеру.

Я добавил пакет jwt lexik и добавил config для security.yaml:

login:
            pattern:  ^/api/login
            stateless: true
            anonymous: true
            json_login:
                check_path:               /api/login_check
                success_handler:          lexik_jwt_authentication.handler.authentication_success
                failure_handler:          lexik_jwt_authentication.handler.authentication_failure
        api:
            pattern:   ^/api
            stateless: true
            anonymous: true
            guard:
                authenticators:
                    - lexik_jwt_authentication.jwt_token_authenticator

И я добавил конфигурацию в api_platform.yaml:

api_platform:
    mapping:
        paths: ['%kernel.project_dir%/src/Entity']
    patch_formats:
        json: ['application/merge-patch+json']
    swagger:
        versions: [3]
        api_keys:
            apiKey:
                name: Authorization
                type: header
    title: API partage de mandats
    version: 1.0.0
    collection:
        pagination:
            client_enabled: true
            enabled_parameter_name: pagination # optional
    eager_loading:
        enabled: false

Я хочу сделать publi c доступ к моему API и предотвратить тестирование API без токена:

Мой API выглядит следующим образом: api

Проблема в том, что я могу получить событие ресурса, если я не аутентифицирован:

enter image description here

Мой текущий контроль доступа:

enter image description here

Как добавить конфигурацию в security.yaml для предотвращения публикации * 105 2 * доступ к ресурсам API?

Ответы [ 2 ]

0 голосов
/ 22 марта 2020

Я исправляю проблему. Все, что мне нужно сделать, это добавить sla sh к моему маршруту в брандмауэре:

api:
            pattern:   ^/api/
            stateless: true
            guard:
                authenticators:
                    - lexik_jwt_authentication.jwt_token_authenticator

Теперь все работает так, как я хочу.

0 голосов
/ 22 марта 2020

Не могли бы вы просто добавить эту строку в свой access_control:

security:
    # ...
    access_control:
        - { path: '^/api/mandates', roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: '^/api', roles: ROLE_USER }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...