针对LDAP服务器进行身份验证

编辑该页面

警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 5.2,不再维护。

这个页面的更新版本Symfob娱乐下载ony 6.2(当前的稳定版本)。

针对LDAP服务器进行身份验证

ob娱乐下载Symfony提供了不同的方法使用LDAP服务器。

安全组件提供了:

  • ldap用户提供者,使用LdapUserProvider类。像所有其他用户提供者,它可以用于任何身份验证提供者。
  • form_login_ldap身份验证提供者,对LDAP服务器进行身份验证使用登录表单。像所有其他身份验证提供者,它可以用于任何用户提供者。
  • http_basic_ldap身份验证提供者,对LDAP服务器使用HTTP基本身份验证。像所有其他身份验证提供者,它可以用于任何用户提供者。

这意味着,下面的场景将工作:

  • 检查用户的密码和获取用户信息对LDAP服务器。这可以通过使用LDAP用户提供者和LDAP登录形式或LDAP HTTP基本身份验证提供者。
  • 检查用户的密码对LDAP服务器,获取用户信息从另一个来源(例如,数据库使用FOSUserBundle)。
  • 从LDAP服务器加载用户信息,而使用另一个身份验证策略(例如,基于符号的pre-authentication)。

安装

在应用程序中使用ob娱乐下载Symfony Flex运行这个命令安装Ldap组件在使用前:

1
美元作曲家需要symfony / ldob娱乐下载ap

Ldap配置参考

看到安全配置引用(SecurityBundle)完整的LDAP配置引用(form_login_ldap,http_basic_ldap,ldap)。一些更有趣的选项如下所示。

配置LDAP客户端

实际上所有机制之前需要一个LDAP客户端进行配置。提供者配置为使用一个默认的服务命名ldap,但你可以覆盖该设置在安全组件的配置。

LDAP客户机可以使用内置的配置LDAP PHP扩展以下服务定义:

  • YAML
  • XML
  • PHP
1 2 3 4 5 6 7 8 9 10 11 12
#配置/ services.yaml服务:ob娱乐下载Symfony \组件\ Ldap \ Ldap:参数:[' ob娱乐下载@Symfony适配器组件\ \ Ldap \ \ ExtLdap \适配器”)ob娱乐下载Symfony适配器组件\ \ Ldap \ \ ExtLdap \适配器:参数:- - - - - -主持人:我的服务器端口:389年加密:tls选项:protocol_version:3推荐:

获取用户使用LDAP用户提供者

如果你想从LDAP服务器获取用户信息,您可能想要使用ldap用户提供者。

  • YAML
  • XML
  • PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14
#配置/包/ security.yaml安全:#……提供者:my_ldap:ldap:服务:ob娱乐下载Symfony \组件\ Ldap \ Ldapbase_dn:dc =示例中,dc = comsearch_dn:“cn = read-only-admin, dc =示例中,dc = com”search_password:密码default_roles:ROLE_USERuid_key:uidextra_fields:['邮件']

谨慎

安全组件逃当LDAP用户提供输入数据提供者使用。然而,LDAP组件本身不提供任何逃离。因此,这是你的责任,以防止LDAP注入攻击时直接使用组件。

谨慎

上面的用户配置在用户提供者仅用于检索数据。这是一个静态用户定义的用户名和密码(提高安全性,定义密码作为一个环境变量)。

如果您的LDAP服务器允许匿名的信息检索,可以设置search_dnsearch_password选项

ldap用户提供者支持许多不同的配置选项:

服务

类型:字符串默认的:ldap

这是您的LDAP客户端配置的名称。你可以自由选择的名称,但它必须是唯一的在您的应用程序不能以数字或包含空格。

base_dn

类型:字符串默认的:

这是目录的基本DN

search_dn

类型:字符串默认的:

这是你只读用户的DN,它将被用来验证对LDAP服务器来获取用户的信息。

search_password

类型:字符串默认的:

这是你只读用户的密码,这将被用来验证对LDAP服务器来获取用户的信息。

default_roles

类型:数组默认的:[]

这是默认的角色你想给一个用户从LDAP服务器获取。如果你没有配置这个关键,你的用户不会有任何角色,将不被视为充分验证。

uid_key

类型:字符串默认的:

这个条目的关键是使用UID。取决于您的LDAP服务器的实现。常用的值是:

  • sAMAccountName(默认)
  • userPrincipalName
  • uid

如果你通过这个选项的值,默认使用UID密钥sAMAccountName

extra_fields

类型:数组默认的:

定义了自定义字段从LDAP服务器。如果任何字段不存在,一个\ InvalidArgumentException将抛出。

过滤器

类型:字符串默认的:

这个键允许您配置LDAP查询将被使用。的{uid_key}字符串的值将被取代uid_key配置值(默认情况下,sAMAccountName),{username}字符串将被用户名你试图取代负载。

例如,用一个uid_keyuid,如果你正试图加载用户fabpot最后的字符串将:(uid = fabpot)

如果你通过这个选项的值,使用默认的过滤器({uid_key} = {username})

为了防止LDAP注入,用户名会逃脱了。

的语法过滤器关键是定义为RFC4515

针对LDAP服务器进行身份验证

针对LDAP服务器进行身份验证可以通过使用表单登录或HTTP基本身份验证提供者。

他们配置完全非ldap同行,外加两个配置键和一个可选的关键:

服务

类型:字符串默认的:ldap

这是您的LDAP客户端配置的名称。你可以自由选择的名称,但它必须是唯一的在您的应用程序不能以数字或包含空格。

dn_string

类型:字符串默认的:{username}

这个键定义字符串的形式用于组成用户的DN,从用户名。的{username}字符串替换为实际的用户名的人试图验证。

例如,如果您的用户DN字符串形式uid =爱因斯坦,dc =示例中,dc = com,那么dn_stringuid = {username}, dc =示例中,dc = com

query_string

类型:字符串默认的:

此(可选)关键用户让用户提供搜索,然后使用绑定过程发现DN。这是有用的在使用多个LDAP用户与不同的供应商base_dn。这个选项的值必须是一个有效的搜索字符串(例如uid = " {username} ")。占位符的值将被替换为实际的用户名。

当使用该选项时,query_string将在指定的DN搜索dn_stringDN的结果query_string将用于验证用户密码。前面的示例,如果您的用户有以下两个DN:dc = companyA, dc =示例中,dc = comdc =为companyB, dc =示例中,dc = com,然后dn_string应该是dc =示例中,dc = com

记住用户名必须是唯一的在两个DN,作为身份验证提供者无法选择正确的用户绑定过程如果发现不止一个。

以下的例子是,对form_login_ldaphttp_basic_ldap

配置示例表单登录

  • YAML
  • XML
  • PHP
1 2 3 4 5 6 7 8 9 10 11
#配置/包/ security.yaml安全:#……防火墙:主要:#……form_login_ldap:#……服务:ob娱乐下载Symfony \组件\ Ldap \ Ldapdn_string:“uid = {username}, dc =例子,dc = com”

配置HTTP基本的示例

  • YAML
  • XML
  • PHP
1 2 3 4 5 6 7 8 9 10
#配置/包/ security.yaml安全:#……防火墙:主要:无状态:真正的http_basic_ldap:服务:ob娱乐下载Symfony \组件\ Ldap \ Ldapdn_string:“uid = {username}, dc =例子,dc = com”

配置示例登录和query_string形式

  • YAML
  • XML
  • PHP
1 2 3 4 5 6 7 8 9 10 11 12 13
#配置/包/ security.yaml安全:#……防火墙:主要:#……form_login_ldap:服务:ob娱乐下载Symfony \组件\ Ldap \ Ldapdn_string:“dc =示例中,dc = com”query_string:’(& (uid = {username}) (memberOf = cn =用户,ou =服务,dc =示例中,dc = com))”search_dn:“……”search_password:“the-raw-password”
这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。