【问题标题】:symony 3.3 guard authetication with multiple providerssymfony 3.3 使用多个提供者保护身份验证
【发布时间】:2020-09-29 16:29:50
【问题描述】:

我正在实施一个 symfony (3.3) 自定义保护身份验证器来针对 OKTA 对用户进行身份验证,它工作正常,没有任何问题。

但是,我想根据存储在数据库中的凭据对管理员用户进行身份验证。

基本上,如果任何用户点击 /api/login 端点,它应该对 OKTA 进行身份验证,除了一个管理员用户应该根据存储在数据库中的密码进行身份验证。请问我怎样才能做到这一点?

这是我的 security.yml

安全性:

providers:
    db_user_provider:
        entity:
            class: MyApiBundle:ApiUser
            property: username

    okta_user_provider:
        id: okta_user_provider

    my_chain_provider:
        chain:
            providers:
                - db_user_provider
                - okta_user_provider

firewalls:
    login:
        pattern: ^/api/login
        anonymous: true
        stateless: true
        provider: my_chain_provider
        guard:
            authenticators:
                - authenticator_guard_okta

非常感谢

【问题讨论】:

    标签: authentication symfony-3.3


    【解决方案1】:

    我在自定义 LoginFormAuthenticator 中解决了这个问题

    即在 public function getUser($credentials, UserProviderInterface $userProvider)

    A) 检查 $credentials['username'] 是否存在于数据库中。如果是,从db中找到用户实体并返回用户

    B) 检查 $credentials['username'] 是否存在于 okta 中。如果是,从okta加载用户并返回用户

    public function checkCredentials($credentials, UserInterface $user)

    A) 检查用户是否是 db 用户实体的实例。如果是,验证密码并返回用户

    B) 检查用户是否是 okta 用户的实例。如果是,则针对 okta 进行验证并返回 okta 用户

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-01
      • 1970-01-01
      • 2015-08-24
      • 1970-01-01
      • 2019-01-06
      • 2020-11-09
      • 2021-02-28
      • 1970-01-01
      相关资源
      最近更新 更多