【发布时间】:2017-07-18 12:23:54
【问题描述】:
我有一个常用的 Symfony 应用程序,包括防火墙、用户提供程序和通过表单登录 (FOSUserBundle)、自定义令牌身份验证(对于应用程序),甚至还有一个用于应用程序一部分的 http 基本身份验证。当然,一次只使用其中一个。特定区域由连接到这些提供商的不同防火墙保护。
security.yml 的摘录
security:
encoders:
FOS\UserBundle\Model\UserInterface: sha512
providers:
authentication_provider:
entity:
class: MyAppBundle:User
property: apiKey
fos_userbundle:
id: fos_user.user_provider.username
...
通常在实时系统上没有app_dev.php,因为这是一个巨大的安全漏洞。但如果需要,它也是在实时系统上进行调试的好方法。我的想法是通过额外的 http 基本身份验证来保护开发环境。这样开发环境仍然是安全的,但您可以在需要时访问它。
但不幸的是,我无法让它工作,因为一旦您将 http 基本身份验证添加到站点并登录,您的用户就会通过 Symfony 应用程序的身份验证。这当然是首先进行身份验证的漏洞点,但是对于这个想法来说是一个交易破坏者,因为应用程序无法区分表单登录用户和基本身份验证用户(我知道我可以区分用户类型但是这将是一个额外的复杂层,我不愿意添加,因为它必须在洞应用程序中进行检查)。
我的问题是是否可以在没有身份验证部分的情况下使用 Symfony 原生 http 基本身份验证。因此,在完成基本身份验证后,浏览器仍在发送 http 基本身份验证,但您仍然是匿名的,并且仍然必须通过表单(例如)登录才能进行身份验证并访问其他受限内容。
编辑:我知道有一些方法可以在 Symfony 之外的服务器配置中进行配置,例如在 Apache 中,但我正在寻找一个 Symfony 解决方案(无需托管更改,包括在本地工作,可以推送到源代码控制, ...)
编辑 2:经过深入研究,我发现所有身份验证过程都必须返回某种令牌。所以它可能不像仅仅覆盖一个提供者并返回一个匿名令牌那么简单。
【问题讨论】:
标签: php symfony security authentication basic-authentication