SecurityBundle配置("security")

编辑本页

警告:您正在浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 3.0,现已不再维护。

本页的更新版本用于Sy欧宝娱乐app下载地址mfony 6.2(当前稳定版本)。

SecurityBundle配置("security")

安全系统是Symfony最强大的部分之一,可以在很大程度上通过其配置进行控制。欧宝娱乐app下载地址

全默认配置

以下是安全系统的完整默认配置。每个部分将在下一节中解释。

  • 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 152153 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 277278 279 280 281 282 283 284 285 286 287 288 289 290
# app / config / security.yml安全:access_denied_url:#示例:/foo/error403#策略可以是:none, migrate, invalidatesession_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:# doctrine中配置的任何名称。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:真正的迭代:1000key_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警卫:#安全配置中“providers”部分的一个键,以防你的用户提供商与防火墙不同供应商:#当匿名用户点击需要身份验证的页面时,应该调用start()方法的服务id(您的一个身份验证器)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,而不是GETpost_only:真正的remember_me:#缺省情况下,在提交认证请求之前,会话必须已经存在#如果为false,则在身份验证期间不会调用Request::hasPreviousSessionrequire_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,而不是GETpost_only:真正的remember_me:#缺省情况下,在提交认证请求之前,会话必须已经存在#如果为false,则在身份验证期间不会调用Request::hasPreviousSession# Symfony欧宝娱乐app下载地址 2.3新功能require_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_pathURL)。

use_forward

类型布尔默认的

如果希望用户被转发到登录表单,而不是被重定向,请将此选项设置为真正的

username_parameter

类型字符串默认的_username

这是您应该提供给登录表单的用户名字段的字段名。当您将表单提交给check_path,安全系统将使用此名称查找POST参数。

password_parameter

类型字符串默认的_password

这是您应该提供给登录表单的密码字段的字段名。当您将表单提交给check_path,安全系统将使用此名称查找POST参数。

post_only

类型布尔默认的真正的

默认情况下,必须将登录表单提交给check_pathURL作为POST请求。通过将此选项设置为,您可以发送一个GET请求check_pathURL。

登录后重定向

  • 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

这是您配置的LDAP客户端的名称。

dn_string

类型字符串默认的{username}

这是将用作绑定DN的字符串。的{username}占位符将被替换为用户提供的值(他的登录名)。根据LDAP服务器的配置,您可能需要重写这个值。

用户提供者

用户仍将从配置的用户提供程序中获取。如果希望从LDAP服务器获取用户,将需要使用ldap用户提供程序,除了两个身份验证提供程序之一(form_login_ldaphttp_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密码编码器

  • YAML
  • XML
  • PHP
1 2 3 4 5 6 7 8
# app / config / security.yml安全:#……编码器:欧宝娱乐app下载地址Symfony核心组件\ \安全\ \ \用户:算法: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

http摘要认证

要使用HTTP-Digest身份验证,您需要提供一个域和一个秘密:

  • YAML
  • XML
  • PHP
1 2 3 4 5 6 7
# app / config / security.yml安全:防火墙:somename:http_digest:秘密:“% %的秘密”域:“安全api”
此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。