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