我之前正在设置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自行创建的值的手动覆盖。
有人可以提供建议吗?谢谢:))
答案 0 :(得分:3)
对AnonymousToken
进行身份验证时,会比较AnonymousAuthenticationProvider
的密钥和令牌。如果它们不匹配,则验证失败。
同样适用于RememberMeToken
和RememberMeAuthenticationProvider
。当令牌和提供者的密钥不匹配时,身份验证失败。
密钥用于确定当前进行身份验证的令牌是由应用程序本身创建的,而不是由恶意客户端提交的。这主要来自Symfony Security基于Spring Security(Java)和Java具有RMI(远程方法调用)支持的事实。来自Spring docs:
关键属性的使用不应被视为在此提供任何真正的安全性。这只是一本簿记练习。如果您正在共享一个包含AnonymousAuthenticationProvider的ProviderManager,在这种情况下,身份验证客户端可以构造Authentication对象(例如使用RMI调用),那么恶意客户端可以提交它自己创建的AnonymousAuthenticationToken(已选中)用户名和权限列表)。如果密钥是可猜测的或可以找到,那么匿名提供者将接受该令牌。这不是正常使用的问题,但如果您使用的是RMI,最好使用自定义的ProviderManager,它省略了匿名提供程序,而不是共享您用于HTTP身份验证机制的提供程序。