Где правильное место для аутентификации пользователей из нескольких мест? - PullRequest
0 голосов
/ 14 февраля 2020

В моем первом проекте Symfony 4.4 мне нужно аутентифицировать пользователей из базы данных. К сожалению, перед входом пользователя мне нужно проверить статус пользователя в удаленном API-сервисе. Если пользователь активен в этой службе и учетные данные такие же, как в моей базе данных, я могу аутентифицировать пользователя в своем приложении.

Где лучше всего проверить, активен ли пользователь перед аутентификацией в моем приложении? Мне нужно создать собственную охрану? Пользовательский провайдер?

Я использую аутентификацию Lexik JWT, там мой /config/packages/security.yaml

security:
    providers:

        app_user_provider:
            entity:
                class: App\Entity\User
                property: email

    firewalls:
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false
        authorization:
            pattern:  ^/api/v1/auth/
            stateless: true
            anonymous: true
            json_login:
                check_path: /api/v1/auth/sign-in/
                success_handler: lexik_jwt_authentication.handler.authentication_success
                failure_handler: lexik_jwt_authentication.handler.authentication_failure
                username_path: email
        api:
            pattern: ^/api/v1/(user|req)/
            stateless: true
            anonymous: false
            provider: app_user_provider
            guard:
                authenticators:
                    - lexik_jwt_authentication.jwt_token_authenticator

1 Ответ

0 голосов
/ 14 февраля 2020

Я не использовал Symfony после 4.1, поэтому в последнее время все могло измениться. Вам просто нужно проверить.

Где лучше всего проверить, активен ли пользователь перед аутентификацией в моем приложении? Мне нужно создать собственную охрану? Пользовательский пользовательский поставщик?

Пользовательский поставщик является ответом. Если вы посмотрите на UserProviderInterface , там написано "Internally, a user provider can load users from any source (databases, configuration, web service)."

... перед входом пользователя, мне нужно проверить статус пользователя в удаленной службе API. Если пользователь активен в этой службе и учетные данные такие же, как в моей базе данных, я могу аутентифицировать пользователя в своем приложении.

Итак, что вы можете сделать, это удовлетворить ваше требование:

  • Реализация firewall в вашем serurity.yaml и использование его simple_preauth.
  • Реализация вашего класса аутентификатора, который идет с simple_preauth. authenticator. Это связывает все, что касается аутентификации.
  • Реализуйте своего провайдера, который сначала вызывает ваш удаленный API, чтобы проверить, активен ли пользователь, а затем, проверьте еще раз локальную БД и так далее.

Ресурсы:

  • Убедитесь, что вы понимаете поток Symfony Auth перед всем !
  • пример потока аутентификации JWT в Symfony.
  • Существует множество Symfony примеров безопасности здесь .
  • Также взгляните на Symfony Security do c, где вы увидите много информации по всей теме.
...