针对LDAP服务器进行身份验证
编辑该页面警告:你浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 4.3,不再维护。
读这个页面的更新版本Symf欧宝娱乐app下载地址ony 6.2(当前的稳定版本)。
针对LDAP服务器进行身份验证
欧宝娱乐app下载地址Symfony提供了不同的方法使用LDAP服务器。
安全组件提供了:
- 的
ldap
用户提供者,使用LdapUserProvider类。像所有其他用户提供者,它可以用于任何身份验证提供者。 - 的
form_login_ldap
身份验证提供者,对LDAP服务器进行身份验证使用登录表单。像所有其他身份验证提供者,它可以用于任何用户提供者。 - 的
http_basic_ldap
身份验证提供者,对LDAP服务器使用HTTP基本身份验证。像所有其他身份验证提供者,它可以用于任何用户提供者。
这意味着,下面的场景将工作:
- 检查用户的密码和获取用户信息对LDAP服务器。这可以通过使用LDAP用户提供者和LDAP登录形式或LDAP HTTP基本身份验证提供者。
- 检查用户的密码对LDAP服务器,获取用户信息从另一个来源(例如,数据库使用FOSUserBundle)。
- 从LDAP服务器加载用户信息,而使用另一个身份验证策略(例如,基于符号的pre-authentication)。
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服务:欧宝娱乐app下载地址Symfony \组件\ Ldap \ Ldap:参数:[' 欧宝娱乐app下载地址@Symfony适配器组件\ \ Ldap \ \ ExtLdap \适配器”)欧宝娱乐app下载地址Symfony适配器组件\ \ Ldap \ \ ExtLdap \适配器:参数:- - - - - -主持人:我的服务器端口:389年加密:tls选项:protocol_version:3推荐:假
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21日22日23日
< !- - - - - -- - - - - -配置/services.xml -->< /span>< ?xml version = " 1.0 " encoding = " utf - 8 " ? ><容器xmlns=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services”xmlns: xsi=“http://www.w3.org/2001/XMLSchema-instance”xsi: schemaLocation=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services //www.oldmanjams.com/schema/dic/services/services-1.0.xsd”><服务><服务id=“欧宝娱乐app下载地址Symfony \组件\ Ldap \ Ldap”><论点类型=“服务”id=“欧宝娱乐app下载地址Symfony适配器组件\ \ Ldap \ \ ExtLdap \适配器”/ >< /服务><服务id=“欧宝娱乐app下载地址Symfony适配器组件\ \ Ldap \ \ ExtLdap \适配器”><论点类型=“收集”><论点关键=“主机”>我的服务器< /论点><论点关键=“端口”>389年< /论点><论点关键=“加密”>tls< /论点><论点关键=“选项”类型=“收集”><论点关键=“protocol_version”>3< /论点><论点关键=“推荐”>假< /论点>< /论点>< /论点>< /服务>< /服务>< /容器>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
/ /配置/ services.php使用欧宝娱乐app下载地址\组件\Ldap\适配器\ExtLdap\适配器;使用欧宝娱乐app下载地址\组件\Ldap\Ldap;美元容器- >注册(Ldap::类)- >addArgument (新引用(适配器::类));美元容器- >注册(适配器::类)- >setArguments ([“主机”= >我的服务器的,“端口”= >389年,“加密”= >tls的,“选项”= > [“protocol_version”= >3,“推荐”= >假)));
获取用户使用LDAP用户提供者
如果你想从LDAP服务器获取用户信息,您可能想要使用ldap
用户提供者。
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8 9 10 11 12 13
#配置/包/ security.yaml安全:#……提供者: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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
< !- - - - - -- - - - - -配置/packages/security.xml -->< /span>< ?xml version = " 1.0 " encoding = " utf - 8 " ? ><srv:容器xmlns=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/security”xmlns: xsi=“http://www.w3.org/2001/XMLSchema-instance”xmlns:深水救生艇=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services”xsi: schemaLocation=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services //www.oldmanjams.com/schema/dic/services/services-1.0.xsd”><配置><提供者的名字=“my_ldap”><ldap服务=“欧宝娱乐app下载地址Symfony \组件\ Ldap \ Ldap”基本dn=“dc =示例中,dc = com”search-dn=“cn = read-only-admin, dc =示例中,dc = com”search-password=“密码”默认角色=“ROLE_USER”uid-key=“uid”/ >< /提供者>< /配置>< /srv:容器>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
/ /配置/包/ security.php使用欧宝娱乐app下载地址\组件\Ldap\Ldap;美元容器- >loadFromExtension (“安全”,(“供应商”= > [“ldap_users”= > [“ldap”= > [“服务”= > Ldap::类,“base_dn”= >“dc =示例中,dc = com”,“search_dn”= >“cn = read-only-admin, dc =示例中,dc = com”,“search_password”= >“密码”,“default_roles”= >“ROLE_USER”,“uid_key”= >“uid”,]]]];
谨慎
安全组件逃当LDAP用户提供输入数据提供者使用。然而,LDAP组件本身不提供任何逃离。因此,这是你的责任,以防止LDAP注入攻击时直接使用组件。
谨慎
上面的用户配置在用户提供者仅用于检索数据。这是一个静态用户定义的用户名和密码(提高安全性,定义密码作为一个环境变量)。
如果您的LDAP服务器允许匿名检索信息,您可以设置search_dn
和search_password
选项零
。
的ldap
用户提供者支持许多不同的配置选项:
uid_key
类型:字符串
默认的:零
这个条目的关键是使用UID。取决于您的LDAP服务器的实现。常用的值是:
sAMAccountName
(默认)userPrincipalName
uid
如果你通过零
这个选项的值,默认使用UID密钥sAMAccountName
。
针对LDAP服务器进行身份验证
针对LDAP服务器进行身份验证可以通过使用表单登录或HTTP基本身份验证提供者。
他们配置完全非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:#……服务:欧宝娱乐app下载地址Symfony \组件\ Ldap \ Ldapdn_string:“uid = {username}, dc =例子,dc = com”
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
< !- - - - - -- - - - - -配置/packages/security.xml -->< /span>< ?xml version = " 1.0 " encoding = " utf - 8 " ? ><srv:容器xmlns=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/security”xmlns: xsi=“http://www.w3.org/2001/XMLSchema-instance”xmlns:深水救生艇=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services”xsi: schemaLocation=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services //www.oldmanjams.com/schema/dic/services/services-1.0.xsd”><配置><防火墙的名字=“主要”><form-login-ldap服务=“欧宝娱乐app下载地址Symfony \组件\ Ldap \ Ldap”dn-string=“uid = {username}, dc =示例中,dc = com”/ >< /防火墙>< /配置>< /srv:容器>
1 2 3 4 5 6 7 8 9 10 11 12 13 14
/ /配置/包/ security.php使用欧宝娱乐app下载地址\组件\Ldap\Ldap;美元容器- >loadFromExtension (“安全”,(“防火墙”= > [“主要”= > [“form_login_ldap”= > [“服务”= > Ldap::类,“dn_string”= >“uid = {username}, dc =例子,dc = com”,/ /……]]]];
配置HTTP基本的示例
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8 9 10 11
#配置/包/ security.yaml安全:#……防火墙:主要:#……http_basic_ldap:#……服务:欧宝娱乐app下载地址Symfony \组件\ Ldap \ Ldapdn_string:“uid = {username}, dc =例子,dc = com”
1 2 3 4 5 6 7 8 9 10 11 12 13 14
< !- - - - - -- - - - - -配置/packages/security.xml -->< /span>< ?xml version = " 1.0 " encoding = " utf - 8 " ? ><srv:容器xmlns=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/security”xmlns: xsi=“http://www.w3.org/2001/XMLSchema-instance”xmlns:深水救生艇=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services”xsi: schemaLocation=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services //www.oldmanjams.com/schema/dic/services/services-1.0.xsd”><配置><防火墙的名字=“主要”无状态的=“真正的”><http-basic-ldap服务=“欧宝娱乐app下载地址Symfony \组件\ Ldap \ Ldap”dn-string=“uid = {username}, dc =示例中,dc = com”/ >< /防火墙>< /配置>< /srv:容器>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
/ /配置/包/ security.php使用欧宝娱乐app下载地址\组件\Ldap\Ldap;美元容器- >loadFromExtension (“安全”,(“防火墙”= > [“主要”= > [“http_basic_ldap”= > [“服务”= > Ldap::类,“dn_string”= >“uid = {username}, dc =例子,dc = com”,/ /……),“无状态”= >真正的,]]];
配置示例登录和query_string形式
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8 9 10 11 12
#配置/包/ security.yaml安全:#……防火墙:主要:#……form_login_ldap:#……服务:欧宝娱乐app下载地址Symfony \组件\ Ldap \ Ldapdn_string:“dc =示例中,dc = com”query_string:’(& (uid = {username}) (memberOf = cn =用户,ou =服务,dc =示例中,dc = com))”
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
< !- - - - - -- - - - - -配置/packages/security.xml -->< /span>< ?xml version = " 1.0 " encoding = " utf - 8 " ? ><srv:容器xmlns=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/security”xmlns: xsi=“http://www.w3.org/2001/XMLSchema-instance”xmlns:深水救生艇=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services”xsi: schemaLocation=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services //www.oldmanjams.com/schema/dic/services/services-1.0.xsd”><配置><防火墙的名字=“主要”><form-login-ldap服务=“欧宝娱乐app下载地址Symfony \组件\ Ldap \ Ldap”dn-string=“dc =示例中,dc = com”查询字符串=”(,(uid = {username}) (memberOf = cn =用户,ou =服务,dc =示例中,dc = com))”/ >< /防火墙>< /配置>< /srv:容器>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
/ /配置/包/ security.php使用欧宝娱乐app下载地址\组件\Ldap\Ldap;美元容器- >loadFromExtension (“安全”,(“防火墙”= > [“主要”= > [“form_login_ldap”= > [“服务”= > Ldap::类,“dn_string”= >“dc =示例中,dc = com”,“query_string”= >’(& (uid = {username}) (memberOf = cn =用户,ou =服务,dc =示例中,dc = com))”,/ /……]]]]);