我正在实现一个symfony(3.3)自定义保护身份验证器,以针对OKTA对用户进行身份验证,并且工作正常,没有任何问题。
但是,我想根据数据库中存储的凭据对管理员用户进行身份验证。
基本上,如果有任何用户访问/ api / login终结点,则应根据OKTA进行身份验证,但一个管理员用户必须针对数据库中存储的密码进行身份验证。我该如何实现?
这是我的安全性。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
非常感谢
答案 0 :(得分:0)
我在自定义的LoginFormAuthenticator中解决了此问题
即
public function getUser($credentials, UserProviderInterface $userProvider)
A)检查$ credentials ['username']是否存在于数据库中。如果是,请从数据库中找到用户实体并返回用户
B)检查okta中是否存在$ credentials ['username']。如果是,请从okta加载用户并返回用户
public function checkCredentials($credentials, UserInterface $user)
A)检查用户是否是db用户实体的实例。如果是,请验证密码并返回用户
B)检查用户是否是okta用户的实例。如果是,请针对okta进行验证并返回okta用户