针对LDAP服务器进行身份验证
编辑本页针对LDAP服务器进行身份验证
ob娱乐下载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_ldap
,http_basic_ldap
,ldap
).下面将介绍一些更有趣的选项。
配置LDAP客户端
所有机制实际上都需要事先配置好的LDAP客户端。提供程序被配置为使用一个名为ldap
,但您可以在安全组件的配置中覆盖此设置。
LDAP客户端可以使用内置的配置LDAP PHP扩展使用以下服务定义:
- YAML
- XML
- PHP
12 3 4 5 6 7 8 9 10 11 12 13 14
#配置/ services.yaml服务:ob娱乐下载Symfony \组件\ Ldap \ Ldap:参数:[' ob娱乐下载@Symfony适配器组件\ \ Ldap \ \ ExtLdap \适配器”)标签:-ldapob娱乐下载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 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用户提供程序时,Security组件转义所提供的输入数据。但是,LDAP组件本身还没有提供任何转义。因此,您有责任在直接使用组件时防止LDAP注入攻击。
谨慎
上面在用户提供程序中配置的用户仅用于检索数据。它是由用户名和密码定义的静态用户(为了提高安全性,将密码定义为环境变量)。
如果LDAP服务器允许匿名检索信息,则可以设置search_dn
而且search_password
选项零
.
的ldap
用户提供程序支持许多不同的配置选项:
uid_key
类型:字符串
默认的:零
这是用于作为其UID的条目的键。这取决于您的LDAP服务器实现。常用的值有:
sAMAccountName
(默认)userPrincipalName
uid
如果你通过了零
作为该选项的值,使用默认的UID keysAMAccountName
.
针对LDAP服务器进行身份验证
可以使用表单登录或HTTP基本身份验证提供程序对LDAP服务器进行身份验证。
它们的配置与非ldap对应的配置完全相同,只是增加了两个配置键和一个可选键:
dn_string
类型:字符串
默认的:{username}
这个键定义了从用户名开始组成用户DN的字符串的形式。的{username}
字符串将被试图进行身份验证的人的实际用户名替换。
例如,如果您的用户在表单中有DN字符串uid =爱因斯坦,dc =示例中,dc = com
,则dn_string
将uid = {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
#配置/包/ security.yaml安全:#……防火墙:主要:#……form_login_ldap:#……服务:ob娱乐下载Symfony \组件\ Ldap \ Ldapdn_string:“uid = {username}, dc =例子,dc = com”
HTTP Basic配置举例
- 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
12 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”