【问题标题】:Where is correct place to authenticate users from multiple places?从多个地方对用户进行身份验证的正确位置在哪里?
【发布时间】:2020-02-14 12:38:20
【问题描述】:

在我的第一个 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

【问题讨论】:

    标签: symfony authentication symfony-4.4


    【解决方案1】:

    我在 4.1 之后没有使用过 Symfony,所以最近情况可能发生了变化。你只需要检查一下。

    在我的应用中进行身份验证之前检查用户是否处于活动状态的最佳位置是哪里?我需要创建自定义警卫吗?自定义用户提供者?

    用户提供者就是答案。如果您查看UserProviderInterface,它会显示"Internally, a user provider can load users from any source (databases, configuration, web service)."

    ... 在用户登录之前,我需要检查远程 API 服务中的用户状态。如果用户在此服务中处于活动状态并且凭据与我的数据库中的相同,我可以在我的应用中对用户进行身份验证。

    所以你能做的就是满足你的要求:

    • 在您的 serurity.yaml 中实现 firewall 并使其使用 simple_preauth
    • 实现与simple_preauth. authenticator 一起使用的身份验证器类。就身份验证而言,这会将所有内容连接起来。
    • 实现您的用户提供程序,首先调用您的远程 API 以检查用户是否处于活动状态,然后再检查您的本地数据库,依此类推。

    资源:

    • 确保您了解 Symfony 身份验证 flow 在一切之前
    • example Symfony 中的 JWT 身份验证流程。
    • 有很多 Symfony 安全相关的例子here
    • 还可以查看 Symfony 安全文档,您将在其中看到有关整个主题的大量信息。

    【讨论】:

      猜你喜欢
      • 2016-10-31
      • 2012-07-22
      • 2019-03-18
      • 2018-05-10
      • 2013-03-11
      • 1970-01-01
      • 1970-01-01
      • 2011-12-08
      • 2013-04-24
      相关资源
      最近更新 更多