Authentication symony 3.3与多个提供商的guard授权

Authentication symony 3.3与多个提供商的guard授权,authentication,symfony-3.3,Authentication,Symfony 3.3,我正在实现一个symfony(3.3)定制的guard验证器来针对OKTA对用户进行身份验证,它工作正常,没有任何问题 但是,我想根据数据库中存储的凭据对管理员用户进行身份验证 基本上,如果任何用户点击/api/login端点,它应该根据OKTA进行身份验证,除了一个管理员用户应该根据存储在数据库中的密码进行身份验证。我怎样才能做到这一点 这是我的保安 安全: providers: db_user_provider: entity: class:

我正在实现一个symfony(3.3)定制的guard验证器来针对OKTA对用户进行身份验证,它工作正常,没有任何问题

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

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

这是我的保安

安全:

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

非常感谢

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

i、 介入
公共函数getUser($credentials,userProvider接口$userProvider)

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

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

public function checkCredentials($credentials,UserInterface$user)

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

B) 检查该用户是否是okta用户的实例。如果是,根据okta进行验证并返回okta用户