[英]Symfony2 - Purpose of `anonymous.key` in security.yml
我之前正在设置一个Symfony2应用程序,其中包含匿名和HTTP BasicAuth限制的路由。 使用默认值的基本防火墙配置如下所示:
firewalls:
main:
anonymous: ~
http_basic: ~
我找不到有关anonymous
属性选项的信息,但Symfony2的SecurityBundle配置文档除外,它提供了完整的默认配置 。
anonymous
属性似乎只有一个属性: key
,如默认配置的第206行所示:
some_firewall_listener:
# ...
anonymous:
key: 4f954a0667e01
我挖掘了核心代码库和附带的单元测试了一点,它似乎是AnonymousToken
和/或AnonymousAuthenticationListener
的构造函数值,但到目前为止我还没有学到很多东西。
remember_me
下还有一个key
属性,但我认为这有不同的用途。
我找不到任何其他信息来描述这个特定的key
属性是什么,以及它的目的是什么。 AnonymousToken::__construct()
需要$key
和$user
参数,所以我假设这个选项只是对Symfony2自己创建的值的手动覆盖。
有人可以提供建议吗? 谢谢 :)
在验证AnonymousToken
,将比较AnonymousAuthenticationProvider
密钥和令牌。 如果它们不匹配,则身份验证失败。
这同样适用于RememberMeToken
和RememberMeAuthenticationProvider
。 当令牌和提供程序的密钥不匹配时,身份验证将失败。
密钥用于确定当前正在进行身份验证的令牌是由应用程序本身创建的,而不是由恶意客户端提交的。 这主要来自Symfony Security基于Spring Security(Java)和Java具有RMI(远程方法调用)支持的事实。 从Spring文档 :
关键属性的使用不应被视为在此提供任何真正的安全性。 这只是一本簿记练习。 如果您正在共享一个包含AnonymousAuthenticationProvider的ProviderManager,在这种情况下,身份验证客户端可以构造Authentication对象(例如使用RMI调用),那么恶意客户端可以提交它自己创建的AnonymousAuthenticationToken(已选中)用户名和权限列表)。 如果密钥是可猜测的或可以找到,那么匿名提供者将接受该令牌。 这不是正常使用的问题,但如果您使用的是RMI,最好使用自定义的ProviderManager,它省略了匿名提供程序,而不是共享您用于HTTP身份验证机制的提供程序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.