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

编辑本页

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

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

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

欧宝娱乐app下载地址Symfony提供了使用LDAP服务器的不同方法。

安全组件提供:

  • ldap用户提供程序,使用LdapUserProvider类。与所有其他用户提供程序一样,它可以与任何身份验证提供程序一起使用。
  • form_login_ldap身份验证提供程序,用于使用登录表单对LDAP服务器进行身份验证。与所有其他身份验证提供程序一样,它可以与任何用户提供程序一起使用。
  • http_basic_ldap身份验证提供程序,用于使用HTTP Basic对LDAP服务器进行身份验证。与所有其他身份验证提供程序一样,它可以与任何用户提供程序一起使用。

这意味着以下场景将起作用:

  • 在LDAP服务器上检查用户密码并获取用户信息。这可以使用LDAP用户提供程序和LDAP表单登录或LDAP HTTP基本身份验证提供程序来完成。
  • 在从另一个源(例如,使用FOSUserBundle的数据库)获取用户信息时,根据LDAP服务器检查用户密码。
  • 从LDAP服务器加载用户信息,同时使用另一种身份验证策略(例如,基于令牌的预身份验证)。

Ldap配置参考

看到安全配置参考(SecurityBundle)参阅完整的LDAP配置参考(form_login_ldaphttp_basic_ldapldap).下面将介绍一些更有趣的选项。

配置LDAP客户端

所有机制实际上都需要事先配置好的LDAP客户端。提供程序被配置为使用一个名为ldap,但您可以在安全组件的配置中覆盖此设置。

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

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

使用LDAP用户提供程序获取用户

如果希望从LDAP服务器获取用户信息,可能需要使用ldap用户提供者。

  • YAML
  • XML
  • PHP
12 3 4 5 6 7 8 9 10 11 12 13
# app / config / security.yml安全:#……提供者:my_ldap:ldap:服务:欧宝娱乐app下载地址Symfony \组件\ Ldap \ Ldapbase_dn:dc =示例中,dc = comsearch_dn:“cn = read-only-admin, dc =示例中,dc = com”search_password:密码default_roles:ROLE_USERuid_key:uid

谨慎

当使用LDAP用户提供程序时,Security组件转义所提供的输入数据。但是,LDAP组件本身还没有提供任何转义。因此,您有责任在直接使用组件时防止LDAP注入攻击。

谨慎

上面在用户提供程序中配置的用户仅用于检索数据。它是由用户名和密码定义的静态用户(为了提高安全性,将密码定义为环境变量)。

如果LDAP服务器允许匿名检索信息,则可以设置search_dn而且search_password选项

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

服务

类型字符串默认的ldap

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

base_dn

类型字符串默认的

这是目录的基准DN

search_dn

类型字符串默认的

这是只读用户的DN,将用于针对LDAP服务器进行身份验证,以便获取用户的信息。

search_password

类型字符串默认的

这是只读用户的密码,将用于针对LDAP服务器进行身份验证,以便获取用户的信息。

default_roles

类型数组默认的[]

这是您希望赋予从LDAP服务器获取的用户的默认角色。如果您不配置此密钥,您的用户将没有任何角色,并且不会被视为已完全验证。

uid_key

类型字符串默认的sAMAccountName

这是用于作为其UID的条目的键。这取决于您的LDAP服务器实现。常用的值有:

  • sAMAccountName
  • userPrincipalName
  • uid

过滤器

类型字符串默认的({uid_key} = {username})

该键允许您配置将使用哪个LDAP查询。的{uid_key}属性的值将替换为uid_key配置值(默认为sAMAccountName),以及{username}字符串将被替换为您正在尝试加载的用户名。

例如,用uid_keyuid,如果您正在尝试加载用户fabpot,最后的字符串将是:(uid = fabpot)

为了防止LDAP注入,用户名将被转义。

的语法。过滤器键的定义为RFC4515

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

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

它们的配置与非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_string和DN的结果query_string将使用密码对用户进行身份验证。按照前面的例子,如果你的用户有以下两个DN:dc = companyA, dc =示例中,dc = com而且dc =为companyB, dc =示例中,dc = com,然后dn_string应该是dc =示例中,dc = com

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

下面提供了这两种方法的示例form_login_ldap而且http_basic_ldap

表单登录的配置示例

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

HTTP Basic配置举例

  • YAML
  • XML
  • PHP
1 2 3 4 5 6 7 8 9 10
# app / config / security.yml安全:#……防火墙:主要:无状态:真正的http_basic_ldap:服务:欧宝娱乐app下载地址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
# app / config / security.yml安全:#……防火墙:主要:#……form_login_ldap:服务:欧宝娱乐app下载地址Symfony \组件\ Ldap \ Ldapdn_string:“dc =示例中,dc = com”query_string:’(& (uid = {username}) (memberOf = cn =用户,ou =服务,dc =示例中,dc = com))”
此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。