Symfony2 - security.yml中`anonymous.key`的用途

时间:2015-06-29 00:20:03

标签: php security symfony

我之前正在设置Symfony2应用程序,其中包含匿名且受HTTP BasicAuth限制的路由。使用默认值的基本防火墙配置如下所示:

firewalls:
    main:
        anonymous: ~
        http_basic: ~

我无法找到有关anonymous属性选项的信息,但Symfony2的SecurityBundle配置文档除外,它提供full default configuration

anonymous属性似乎只有一个属性:key,如默认配置的 206 行所示:

some_firewall_listener:
    # ...
    anonymous:
        key: 4f954a0667e01

我挖掘了核心代码库和附带的单元测试了一下,它似乎是AnonymousToken和/或AnonymousAuthenticationListener的构造函数值,但到目前为止我还没有学到很多东西。

key下还有一个remember_me属性,但我认为这有不同的用途。

我找不到任何其他信息来描述这个特定的key属性是什么,以及它的目的是什么。 AnonymousToken::__construct()需要$key$user个参数,因此我假设此选项只是对Symfony2自行创建的值的手动覆盖。

有人可以提供建议吗?谢谢:))

1 个答案:

答案 0 :(得分:3)

AnonymousToken进行身份验证时,会比较AnonymousAuthenticationProvider的密钥和令牌。如果它们不匹配,则验证失败。

同样适用于RememberMeTokenRememberMeAuthenticationProvider。当令牌和提供者的密钥不匹配时,身份验证失败。

密钥用于确定当前进行身份验证的令牌是由应用程序本身创建的,而不是由恶意客户端提交的。这主要来自Symfony Security基于Spring Security(Java)和Java具有RMI(远程方法调用)支持的事实。来自Spring docs

  

关键属性的使用不应被视为在此提供任何真正的安全性。这只是一本簿记练习。如果您正在共享一个包含AnonymousAuthenticationProvider的ProviderManager,在这种情况下,身份验证客户端可以构造Authentication对象(例如使用RMI调用),那么恶意客户端可以提交它自己创建的AnonymousAuthenticationToken(已选中)用户名和权限列表)。如果密钥是可猜测的或可以找到,那么匿名提供者将接受该令牌。这不是正常使用的问题,但如果您使用的是RMI,最好使用自定义的ProviderManager,它省略了匿名提供程序,而不是共享您用于HTTP身份验证机制的提供程序。