Symfony2 : How to get Authentication Listener config values into another service?

标签 symfony single-sign-on cas

我正在为 Symfony 2 创建一个身份验证提供程序,它允许用户使用名为 CAS 的单点登录协议(protocol)进行身份验证。 .

我的 认证监听器 延伸自 AbstractAuthenticationListener .配置参数之一是 check_path ,这是触发身份验证监听器对请求进行身份验证的路径/路由。

我需要check_path当我构造到 CAS 服务器的 URL 时(因此 CAS 服务器知道将用户返回到哪里),这很容易,因为我的自定义 入口点在我的安全性 中构造类时,会将配置数组传递给它工厂 .

困难的部分是我还需要check_path在监听器之外,例如在我的 内部进行身份验证期间身份验证提供者 类(class)。我需要它,因为当 CAS 服务器将用户发送回应用程序时,它会传递一个必须验证的“票证”参数。为了验证它,我向 CAS 服务器发送了一个 curl 请求,该请求必须包含票证以及原始的 check_path。那是用过的。

在写这篇文章时,我意识到当我在身份验证提供程序中时,我可以获得页面请求的当前 URL(因为它是 check_path 无论如何都会触发它),但这似乎不对,我宁愿得到直接配置值来重新构造服务 URL。当我想使用 check_path 时,它也无济于事。其他地方,比如在构造一个到 CAS 服务器的注销 URL 时,它也需要 check_path .

编辑: createAuthProvider AbstractFactory的方法传递了配置和容器,但我不能在这里修改我的任何服务,因为它们还不是容器的一部分。也许如果我有办法在加载我的服务并以某种方式访问​​监听器配置后添加编译器传递?

最佳答案

您可以将 check_path 作为参数传递给您的监听器吗?

如果它在您的配置或参数文件中定义,您可以将其传递给您的监听器,如下所示:

your_authentication_listener:
    class: YourBundle\Listener\AuthenticationListener
    arguments: ['%check_path%']
    tags:
        ...

(如果我理解你正确的话。)

关于Symfony2 : How to get Authentication Listener config values into another service?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25899072/

相关文章:

grails - 使用 Grails Spring Security CAS 插件重定向循环

java - 使用 Spring Security 3 实现 CAS

php - Doctrine MIN() 低性能

php - Doctrine 事件 post_persist

php - Sylius:添加新的 Payum 网关(Rabobank Omnikassa)

api - 请求体必须包含以下参数 'client_id'

java - 使用 Spring Security 委托(delegate)/转发 Kerberos 票证

Symfony 4 迁移在执行期间迁移失败

ruby-on-rails - 使用不同应用程序的单一登录接近 ruby​​ on rails

java - 我可以将 Jasig CAS 服务器用于 Android 移动应用程序吗?