针对LDAP服务器进行身份验证
编辑该页面警告:你浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 3.2,不再维护。
读这个页面的更新版本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 13 14
# app / config / services.yml服务:ldap:类:欧宝娱乐app下载地址Symfony \组件\ Ldap \ Ldap参数:(“@ext_ldap_adapter”)ext_ldap_adapter:类:欧宝娱乐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日
< !- - - - - -- - - - - -app/config/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=“ldap”类=“欧宝娱乐app下载地址Symfony \组件\ Ldap \ Ldap”><论点类型=“服务”id=“ext_ldap_adapter”/ >< /服务><服务id=“ext_ldap_adapter”类=“欧宝娱乐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
/ / app / config / services.php使用欧宝娱乐app下载地址\组件\Ldap\Ldap;使用欧宝娱乐app下载地址\组件\Ldap\适配器\ExtLdap\适配器;使用欧宝娱乐app下载地址\组件\DependencyInjection\定义;美元容器- >注册(“ldap”、Ldap::类)- >addArgument (新引用(“ext_ldap_adapter”));美元容器- >setDefinition (“ext_ldap_adapter”,新定义(适配器::类,数组(“主机”= >我的服务器的,“端口”= >389年,“加密”= >tls的,“选项”= >数组(“protocol_version”= >3,“推荐”= >假))));
获取用户使用LDAP用户提供者
如果你想从LDAP服务器获取用户信息,您可能想要使用ldap
用户提供者。
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8 9 10 11 12 13
# app / config / security.yml安全:#……提供者:my_ldap: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
< !- - - - - -- - - - - -app/config/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服务=“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
美元容器- >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
用户提供者支持许多不同的配置选项:
uid_key
类型:字符串
默认的:sAMAccountName
这个条目的关键是使用UID。取决于您的LDAP服务器的实现。常用的值是:
sAMAccountName
userPrincipalName
uid
针对LDAP服务器进行身份验证
针对LDAP服务器进行身份验证可以通过使用表单登录或HTTP基本身份验证提供者。
他们配置完全非ldap同行,外加两个配置密钥:
dn_string
类型:字符串
默认的:{username}
这个关键的定义中使用的字符串的形式组成用户的DN,从用户名。的{username}
字符串替换为实际的用户名的人试图验证。
例如,如果您的用户DN字符串形式uid =爱因斯坦,dc =示例中,dc = com
,那么dn_string
将uid = {username}, dc =示例中,dc = com
。
以下的例子是,对form_login_ldap
和http_basic_ldap
。
配置示例表单登录
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8 9 10 11 12 13
# app / config / security.yml安全:#……防火墙:主要:#……form_login_ldap:login_path:登录check_path:login_check#……服务:ldapdn_string:“uid = {username}, dc =例子,dc = com”
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
< !- - - - - -- - - - - -app/config/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登录路径=“登录”看看路径=“login_check”服务=“ldap”dn-string=“uid = {username}, dc =示例中,dc = com”/ >< /防火墙>< /配置>< /srv:容器>
1 2 3 4 5 6 7 8 9 10 11 12 13
美元容器- >loadFromExtension (“安全”,数组(“防火墙”= >数组(“主要”= >数组(“form_login_ldap”= >数组(“login_path”= >“登录”,“check_path”= >“login_check”,“服务”= >“ldap”,“dn_string”= >“uid = {username}, dc =例子,dc = com”,/ /……))));
配置HTTP基本的示例
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8 9 10 11
# app / config / security.yml安全:#……防火墙:主要:#……http_basic_ldap:#……服务:ldapdn_string:“uid = {username}, dc =例子,dc = com”
1 2 3 4 5 6 7 8 9 10 11 12 13 14
< !- - - - - -- - - - - -app/config/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服务=“ldap”dn-string=“uid = {username}, dc =示例中,dc = com”/ >< /防火墙>< /配置>< /srv:容器>
1 2 3 4 5 6 7 8 9 10 11 12
美元容器- >loadFromExtension (“安全”,数组(“防火墙”= >数组(“主要”= >数组(“http_basic_ldap”= >数组(“服务”= >“ldap”,“dn_string”= >“uid = {username}, dc =例子,dc = com”,/ /……),“无状态”= >真正的)));