微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

symony 3.3与多个提供者的防护认证

如何解决symony 3.3与多个提供者的防护认证

我正在实现一个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

非常感谢

解决方法

我在自定义的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用户

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。