SecurityBundle配置(“安全”)
编辑该页面警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 3.0,不再维护。
读这个页面的更新版本Symfob娱乐下载ony 6.2(当前的稳定版本)。
SecurityBundle配置(“安全”)
安全系统是其中一个最强大的Symfony的部分,很大程度上可以通过配置控制。ob娱乐下载
完整的默认配置
以下是完整的安全系统的默认配置。每个部分将在下一节中解释。
- YAML
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17日18 19 20 21日22日23日24日25日26日27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290
# app / config / security.yml安全:access_denied_url:~#例子:/ foo / error403#策略可以:没有,迁移,无效session_fixation_strategy:迁移hide_user_not_found:真正的always_authenticate_before_granting:假erase_credentials:真正的access_decision_manager:策略:肯定的#肯定之一,共识,一致allow_if_all_abstain:假allow_if_equal_granted_denied:真正的acl:#任何名称中配置原则。dbal节连接:~缓存:id:~前缀:sf2_acl_供应商:~表:类:acl_classes条目:acl_entriesobject_identity:acl_object_identitiesobject_identity_ancestors:acl_object_identity_ancestorssecurity_identity:acl_security_identities选民:allow_if_object_identity_unavailable:真正的编码器:#的例子:Acme \ DemoBundle \ \ User1实体:sha512Acme \ DemoBundle \ \ User2实体:算法:sha512encode_as_base64:真正的迭代:5000年# PBKDF2编码器#有关详细信息,请参阅以下关于PBKDF2安全与速度Acme \ \类\名称:算法:pbkdf2hash_algorithm:sha512encode_as_base64:真正的迭代:1000年key_length:40#例子选项/值对一个定制的编码器的样子Acme \ DemoBundle \ \ User3实体:id:my.encoder.id# BCrypt编码器#有关详细信息,请参阅以下关于bcrypt在特定的依赖关系Acme \ DemoBundle \ \ User4实体:算法:bcrypt成本:13#明文编码器#它不做任何编码Acme \ DemoBundle \ \ User5实体:算法:明文ignore_case:假提供者:#需要#的例子:my_in_memory_provider:记忆:用户:foo:密码:喷火角色:ROLE_USER栏:密码:酒吧角色:[ROLE_USER,ROLE_ADMIN]my_entity_provider:实体:类:SecurityBundle:用户属性:用户名#的非实体管理器manager_name:~my_ldap_provider:ldap:服务:~base_dn:~search_dn:~search_password:~default_roles:“ROLE_USER”uid_key:“sAMAccountName”过滤器:' ({uid_key} = {username})”#示例自定义服务提供方程序my_some_custom_provider:id:~#链一些供应商my_chain_provider:链:提供者:(my_in_memory_provider,my_entity_provider]防火墙:#需要#的例子:somename:模式:. *#防火墙限制到一个特定的主机主持人:admin \ .example \ com#防火墙限制到特定的http方法方法:(,邮报》)request_matcher:some.service.idaccess_denied_url:/ foo / error403access_denied_handler:some.service.identry_point:some.service.id供应商:some_key_from_above#管理每个防火墙存储会话信息#请参见下面的“防火墙”的更多细节背景:context_key无状态:假x509:供应商:some_key_from_aboveremote_user:供应商:some_key_from_abovehttp_basic:供应商:some_key_from_abovehttp_basic_ldap:供应商:some_key_from_above服务:ldapdn_string:“{username}”http_digest:供应商:some_key_from_above警卫:#一个关键的“供应商”一节您的安全配置,以防你的用户提供不同的防火墙供应商:~#服务id(你的身份验证器)的start()方法应该调用一个匿名用户点击一个页面时,需要验证entry_point:零#服务id数组你所有的“身份验证器”身份验证器:[]form_login:#在这里提交登录表单check_path:/ login_check#这里的用户被重定向时需要登录login_path:/登录#如果情况属实,提出了用户登录表单,而不是重定向use_forward:假#登录成功重定向选择(深入阅读下文)always_use_default_target_path:假default_target_path:/target_path_parameter:_target_pathuse_referer:假#登录失败重定向选择(深入阅读下文)failure_path:/ foofailure_forward:假failure_path_parameter:_failure_pathfailure_handler:some.service.idsuccess_handler:some.service.id#用户名和密码字段的字段名username_parameter:_usernamepassword_parameter:_password# csrf标记的选项csrf_parameter:_csrf_tokencsrf_token_id:进行身份验证csrf_token_generator:my.csrf_token_generator.id#默认情况下,登录表单* *必须发表一篇文章,而不是一个post_only:真正的remember_me:假#默认情况下,提交身份验证之前,必须存在一个会话请求#如果虚假,那么要求::hasPreviousSession不是叫在身份验证require_previous_session:真正的form_login_ldap:#在这里提交登录表单check_path:/ login_check#这里的用户被重定向时需要登录login_path:/登录#如果情况属实,提出了用户登录表单,而不是重定向use_forward:假#登录成功重定向选择(深入阅读下文)always_use_default_target_path:假default_target_path:/target_path_parameter:_target_pathuse_referer:假#登录失败重定向选择(深入阅读下文)failure_path:/ foofailure_forward:假failure_path_parameter:_failure_pathfailure_handler:some.service.idsuccess_handler:some.service.id#用户名和密码字段的字段名username_parameter:_usernamepassword_parameter:_password# csrf标记的选项csrf_parameter:_csrf_tokencsrf_token_id:进行身份验证csrf_token_generator:my.csrf_token_generator.id#默认情况下,登录表单* *必须发表一篇文章,而不是一个post_only:真正的remember_me:假#默认情况下,提交身份验证之前,必须存在一个会话请求#如果虚假,那么要求::hasPreviousSession不是叫在身份验证#新在Symfonob娱乐下载y 2.3require_previous_session:真正的服务:~dn_string:“{username}”remember_me:token_provider:的名字秘密:“% %”秘密名称:NameOfTheCookie生命周期:3600年#在几秒钟内路径:/ foo域:somedomain.foo安全:假httponly:真正的always_remember_me:假remember_me_parameter:_remember_me注销:路径:/注销目标:/invalidate_session:假delete_cookies:答:{路径:零,域:零}b:{路径:零,域:零}处理程序:[some.service.id,another.service.id]success_handler:some.service.id匿名:~#默认值为任何防火墙和选项some_firewall_listener:模式:~安全:真正的request_matcher:~access_denied_url:~access_denied_handler:~entry_point:~供应商:~无状态:假背景:~注销:csrf_parameter:_csrf_tokencsrf_token_generator:~csrf_token_id:注销路径:/注销目标:/success_handler:~invalidate_session:真正的delete_cookies:#原型名称:路径:~域:~处理程序:[]匿名:秘密:“% %”秘密switch_user:供应商:~参数:_switch_user角色:ROLE_ALLOWED_TO_SWITCHaccess_control:requires_channel:~#使用urldecoded格式路径:~#例子:^ /资源/路径主持人:~“诱导多能性”:[]方法:[]角色:[]role_hierarchy:ROLE_ADMIN:[ROLE_ORGANIZER,ROLE_USER]ROLE_SUPERADMIN:(ROLE_ADMIN)
表单登录配置
当使用form_login
身份验证防火墙下侦听器,有几种常见的选项配置“形式登录”体验。
更多细节,请参阅如何自定义表单登录吗。
登录表单和流程
login_path
类型:字符串
默认的:/登录
这是路径或路径,用户将被重定向到(除非use_forward
被设置为真正的
当他们试图访问受保护的资源,但不是完全验证。
这条路必须被正常访问,用户转向,否则你可能会创建一个重定向循环。详情,请参阅“避免常见的陷阱”。
check_path
类型:字符串
默认的:/ login_check
这是路径或路径,你的登录表单必须服从。防火墙拦截任何请求(帖子
请求,默认情况下)这个URL和处理提交的登录凭证。
确保这个URL是由主防火墙(即不创建一个单独的防火墙check_path
URL)。
username_parameter
类型:字符串
默认的:_username
这是字段名,你应该给你的登录表单的用户名字段。当你提交表单check_path
,安全系统将寻找一个POST参数与这个名字。
post_only
类型:布尔
默认的:真正的
默认情况下,你必须提交你的登录表单check_path
作为一个POST请求的URL。通过设置这个选项假
你可以发送一个GET请求到check_path
URL。
重定向后登录
always_use_default_target_path
(类型:布尔
违约:假
)default_target_path
(类型:字符串
违约:/
)target_path_parameter
(类型:字符串
违约:_target_path
)use_referer
(类型:布尔
违约:假
)
注销配置
invalidate_session
类型:布尔
默认的:真正的
默认情况下,当用户退出从任何防火墙,他们的会话失效。这意味着从一个防火墙日志自动从所有其他的防火墙日志出来。
的invalidate_session
选项允许重新定义这一行为。设置这个选项假
在每一个防火墙,用户只会记录从当前防火墙,而不是其他的。
LDAP的功能
有几个选项对LDAP服务器,连接使用form_login_ldap
和http_basic_ldap
身份验证提供者或ldap
用户提供者。
更多细节,请参阅针对LDAP服务器进行身份验证。
身份验证
您可以使用LDAP验证到LDAP服务器的变体form_login
和http_basic
身份验证提供者。简单地使用form_login_ldap
和http_basic_ldap
,它将尝试绑定
针对LDAP服务器而不是使用密码进行比较。
身份验证提供者都有相同的参数作为正常的同行,外加两个配置密钥:
dn_string
类型:字符串
默认的:{username}
这是字符串将被用作bind DN。的{username}
占位符将用户提供的值替换了(他的登录)。根据您的LDAP服务器的配置,您可能需要重写这个值。
用户提供者
用户仍将从配置的用户提供者。如果你想从LDAP服务器获取用户,您将需要使用ldap
用户提供者,除了这两个身份验证提供者之一(form_login_ldap
或http_basic_ldap
)。
- YAML
1 2 3 4 5 6 7 8 9 10 11 12 13 14
# app / config / security.yml安全:#……提供者:my_ldap_users:ldap:服务:ldapbase_dn:“dc ob娱乐下载= 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密码编码器
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8
# app / config / security.yml安全:#……编码器:ob娱乐下载Symfony核心组件\ \安全\ \ \用户:算法:bcrypt成本:15
的成本
可以的吗4-31
并确定编码的密码将会多久。每个增量的成本
双打所花费的时间编码密码。
如果你不提供成本
选项,默认的成本13
使用。
请注意
你可以在任何时候改变成本——即使你已经有一些密码编码使用不同的成本。新密码将编码使用新的成本,虽然已经编码的使用成本将验证编码时使用。
盐为每个新密码是自动生成,不需要坚持。自一个编码的密码包含盐用于编码,坚持单独编码密码就足够了。
请注意
所有的编码的密码60
字符,所以确保分配足够的空间被持久化。
防火墙的上下文
大多数应用程序只需要一个防火墙。但是如果您的应用程序做使用多个防火墙,你会发现,如果你在一个防火墙身份验证,你不是自动验证。换句话说,系统不共享一个共同的“上下文”:每个防火墙就像一个独立的安全系统。
然而,每个防火墙有一个可选的上下文
键(默认为防火墙的名称),这是用于存储和检索安全数据和从会话。如果这个键是跨多个防火墙设置为相同的值,“上下文”可以被共享:
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8 9 10 11
# app / config / security.yml安全:#……防火墙:somename:#……背景:my_contextothername:#……背景:my_context
http摘要认证
使用http摘要认证需要提供一个王国,一个秘密:
- YAML
- XML
- PHP
1 2 3 4 5 6 7
# app / config / security.yml安全:防火墙:somename:http_digest:秘密:“% %的秘密”域:“安全api”