安全配置参考(SecurityBundle)
编辑本页警告:您正在浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 2.8,现已不再维护。
读本页的更新版本用于Sy欧宝娱乐app下载地址mfony 6.2(当前稳定版本)。
安全配置参考(SecurityBundle)
SecurityBundle集成了安全组件在Sy欧宝娱乐app下载地址mfony应用程序中。方法下配置所有这些选项安全
输入应用程序配置。
1 2 3 4 5
#显示Symfony定义的默认配置值欧宝娱乐app下载地址$PHP应用程序/控制台配置:转储引用安全#显示应用程序使用的实际配置值$PHP应用程序/控制台调试:配置安全
请注意
使用XML时,必须使用http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/security
命名空间和相关的XSD模式可在:http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services/services-1.0.xsd
2.8
的秘密
选择匿名
而且remember_me
在Symfony 2.8中引入。欧宝娱乐app下载地址在2.8之前,它被调用关键
.
2.8
的http_basic_ldap
而且form_login_ldap
身份验证提供者是在Symfony 2.8中引入的。欧宝娱乐app下载地址
2.8
的ldap
用户提供者是在Symfony 2.8中引入的欧宝娱乐app下载地址
表单登录配置
当使用form_login
防火墙下的身份验证侦听器,有几个常用选项用于配置“表单登录”体验。
有关更多细节,请参见如何自定义重定向表单登录后.
登录表单和过程
login_path
类型:字符串
默认的:/登录
这是用户将被重定向到的路由或路径(除非use_forward
设置为真正的
),当他们试图访问受保护的资源,但没有完全验证。
这条路必须可由普通的、未经身份验证的用户访问,否则可能创建重定向循环。详情见“避免常见陷阱".
check_path
类型:字符串
默认的:/ login_check
这是您的登录表单必须提交的路由或路径。防火墙将拦截任何请求(帖子
默认情况下,仅请求)到此URL并处理提交的登录凭据。
确保这个URL被你的主防火墙覆盖(也就是说,不要为它单独创建一个防火墙check_path
URL)。
username_parameter
类型:字符串
默认的:_username
这是您应该提供给登录表单的用户名字段的字段名。当您将表单提交给check_path
,安全系统将使用此名称查找POST参数。
登录后重定向
use_referer
类型:布尔
默认的:假
如果真正的
时,用户被重定向到存储在HTTP_REFERER
当会话中没有存储之前的URL时,将返回头。方法生成的URL与引用URL相同login_path
路由时,用户被重定向到default_target_path
避免重定向循环。
请注意
由于历史原因,以及为了匹配HTTP标准的拼写错误,调用了该选项use_referer
而不是use_referrer
.
注销配置
invalidate_session
类型:布尔
默认的:真正的
默认情况下,当用户从任何防火墙注销时,他们的会话将失效。这意味着从一个防火墙注销会自动将它们从所有其他防火墙注销。
的invalidate_session
选项允许重新定义此行为。将此选项设置为假
在每个防火墙中,用户将只能从当前防火墙注销,而不能从其他防火墙注销。
success_handler
类型:字符串
默认的:“security.logout.success_handler”
用于处理成功注销的服务ID。服务必须实现LogoutSuccessHandlerInterface.
LDAP的功能
方法连接LDAP服务器有几个选项form_login_ldap
而且http_basic_ldap
身份验证提供者或ldap
用户提供者。
有关更多细节,请参见针对LDAP服务器进行身份验证.
身份验证
类的LDAP变体可以验证到LDAP服务器form_login
而且http_basic
身份验证提供者。简单地使用form_login_ldap
而且http_basic_ldap
,这将试图绑定
而不是使用密码比较。
这两个身份验证提供程序都有与它们正常对应的参数相同的参数,只是增加了两个配置键:
dn_string
类型:字符串
默认的:{username}
这是将用作绑定DN的字符串。的{username}
占位符将被替换为用户提供的值(他的登录名)。根据LDAP服务器的配置,您可能需要重写这个值。
用户提供者
用户仍将从配置的用户提供程序中获取。如果希望从LDAP服务器获取用户,将需要使用ldap
用户提供程序,除了两个身份验证提供程序之一(form_login_ldap
或http_basic_ldap
).
- YAML
12 3 4 5 6 7 8 9 10 11 12 13 14
# app / config / security.yml安全:#……提供者:my_ldap_users:ldap:服务:ldapbase_dn:“dc 欧宝娱乐app下载地址= symfony, dc = com”search_dn:“% ldap.search_dn %”search_password:“% ldap.search_password %”default_roles:”uid_key:“uid”过滤器:’(& ({uid_key} = {username}) (objectclass =人)(ou =用户))”
使用PBKDF2编码器:安全性和速度
的PBKDF2编码器提供了高水平的密码安全,由国家标准与技术研究所(NIST)推荐。
你可以看到一个例子pbkdf2
编码器在该页的YAML块。
但是使用PBKDF2也需要一个警告:使用它(伴随着大量的迭代)减慢了过程。因此,PBKDF2应谨慎使用。
一个好的配置至少在1000次迭代和sha512左右。
使用BCrypt密码编码器
谨慎
要使用此编码器,您需要使用PHP Version 5.5或安装ircmaxell / password-compat库通过作曲家。
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8
# app / config / security.yml安全:#……编码器:欧宝娱乐app下载地址Symfony核心组件\ \安全\ \ \用户:算法:bcrypt成本:15
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
<!——app/config/security.xml——> .xml<?xml version="1.0" charset="UTF-8"<srv:容器xmlns=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/security”xmlns: xsi=“http://www.w3.org/2001/XMLSchema-instance”xmlns:深水救生艇=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services”xsi: schemaLocation=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services //www.oldmanjams.com/schema/dic/services/services-1.0.xsd”><配置><!——……--><编码器类=”欧宝娱乐app下载地址Symfony核心组件\ \安全\ \ \用户”算法=“bcrypt”成本=“15”/>配置>srv:容器>
12 3 4 5 6 7 8 9 10 11 12
/ / app / config / security.php使用欧宝娱乐app下载地址\组件\安全\核心\用户\用户;$容器->loadFromExtension (“安全”,数组(/ /……“编码器”= >数组(用户::类= >数组(“算法”= >“bcrypt”,“成本”= >15,),),));
的成本
可以在的范围内4-31
并确定密码编码的长度。的每一增量成本
双打编码密码所花费的时间。
如果你不提供成本
选项,默认的代价13
使用。
请注意
您可以随时更改成本-即使您已经使用不同的成本编码了一些密码。新密码将使用新的代价进行编码,而已经编码的密码将使用编码时使用的代价进行验证。
为每个新密码自动生成一个salt,不需要持久化。由于编码后的密码包含用于编码的盐,因此仅持久化编码后的密码就足够了。
请注意
所有编码的密码都是60
字符很长,所以请确保为它们分配足够的空间进行持久化。
防火墙的上下文
大多数应用程序只需要一个防火墙.但是如果你的申请做使用多个防火墙,您会注意到,如果您在一个防火墙中进行了身份验证,那么在另一个防火墙中就不会自动进行身份验证。换句话说,这些系统不共享一个共同的“上下文”:每个防火墙就像一个单独的安全系统。
但是,每个防火墙都有一个可选的上下文
密钥(默认为防火墙的名称),用于在会话中存储和从会话中检索安全数据。如果这个键在多个防火墙中被设置为相同的值,“context”实际上可以被共享:
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8 9 10 11
# app / config / security.yml安全:#……防火墙:somename:#……背景:my_contextothername:#……背景:my_context
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
<!——app/config/security.xml——> .xml<?xml version="1.0" charset="UTF-8"<srv:容器xmlns=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/security”xmlns: xsi=“http://www.w3.org/2001/XMLSchema-instance”xmlns:深水救生艇=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services”xsi: schemaLocation=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services //www.oldmanjams.com/schema/dic/services/services-1.0.xsd”><配置><防火墙的名字=“somename”上下文=“my_context”><!——……-->防火墙><防火墙的名字=“othername”上下文=“my_context”><!——……-->防火墙>配置>srv:容器>
12 3 4 5 6 7 8 9 10 11 12 13
/ / app / config / security.php$容器->loadFromExtension (“安全”,数组(“防火墙”= >数组(“somename”= >数组(/ /……“背景”= >“my_context”),“othername”= >数组(/ /……“背景”= >“my_context”,),),));
请注意
防火墙上下文密钥存储在会话中,因此每个使用它的防火墙都必须设置它的上下文密钥无状态的
选项假
.否则,上下文将被忽略,您将无法同时在多个防火墙上进行身份验证。
用户检查
在对用户进行身份验证期间,可能需要进行额外的检查,以验证是否允许标识的用户登录。每个防火墙都可以包含一个user_checker
选项定义用于执行这些检查的服务。
了解更多关于用户签入的信息如何创建和启用自定义用户检查.
http摘要认证
要使用HTTP-Digest身份验证,您需要提供一个域和一个秘密:
- YAML
- XML
- PHP
1 2 3 4 5 6 7
# app / config / security.yml安全:防火墙:somename:http_digest:秘密:“% %的秘密”域:“安全api”
12 3 4 5 6 7 8 9 10 11 12 13 14
<!——app/config/security.xml——> .xml<?xml version="1.0" charset="UTF-8"<srv:容器xmlns=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/security”xmlns: xsi=“http://www.w3.org/2001/XMLSchema-instance”xmlns:深水救生艇=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services”xsi: schemaLocation=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services //www.oldmanjams.com/schema/dic/services/services-1.0.xsd”><配置><防火墙的名字=“somename”><http摘要秘密=“% %”秘密领域=“安全api”/>防火墙>配置>srv:容器>
1 2 3 4 5 6 7 8 9 10 11
/ / app / config / security.php$容器->loadFromExtension (“安全”,数组(“防火墙”= >数组(“somename”= >数组(“http_digest”= >数组(“秘密”= >“% %的秘密”,“领域”= >“安全api”,),),),));
2.8
的秘密
选项在Symfony 2.8中引入。欧宝娱乐app下载地址在2.8之前,它被调用关键
.