ldap统一用户认证php,针对LDAP服务器进行身份认证
Symfony提供了不同的方法來配合LDAP服務(wù)器使用。
Security組件提供:
ldap user provider,使用的是
form_login_ldap authentication provider,用于針對(duì)一臺(tái)使用了表單登錄的LDAP服務(wù)器。同所有其他user provider一樣,它可以同任何authentication provider一起使用。
http_basic_ldap authentication provider,用于針對(duì)一臺(tái)使用了HTTP Basic的LDAP服務(wù)器。同所有其他user provider一樣,它可以同任何authentication provider一起使用。
這意味著在以下場合是可以工作的:
利用一臺(tái)LDAP服務(wù)器來比對(duì)用戶密碼并取出用戶信息。這可以使用LDAP user provider,以及LDAP form login或LDAP HTTP basic兩個(gè)authentication provider中的一種來完成。
利用一臺(tái)LDAP服務(wù)器來比對(duì)用戶密碼,但從另一個(gè)資源處取得用戶信息(比如,一個(gè)使用了FOSUserBundle的數(shù)據(jù)庫)。
從一臺(tái)LDAP服務(wù)器取出用戶信息,同時(shí)使用另一種用戶驗(yàn)證策略(比如,基于token的預(yù)驗(yàn)證)。
LDAP配置參考??
完整的LDAP配置參考 (form_login_ldap, http_basic_ldap, ldap) 請(qǐng)見 SecurityBundle Configuration ("security")。其中一些更有意思的選項(xiàng)在此進(jìn)行解釋。
配置LDAP客戶端??
所有架構(gòu)都需要LDAP客戶端被預(yù)先配置好。providers被配置為使用一個(gè)名為 ldap 的服務(wù),但你也可以在security組件的配置信息中覆寫此項(xiàng)設(shè)置。
使用下列配置,一個(gè)LDAP客戶端可以被簡單地配置:
1
2
3
4
5
6
7
8
9
10# app/config/services.ymlservices:ldap:class:Symfony\Component\Ldap\LdapClientarguments: - my-server # host
- 389 # port
- 3 # version
- false # SSL
- true # TLS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
my-server
389
3
false
true
1
2
3
4
5
6
7
8
9
10
11
12
13// app/config/services.php
use Symfony\Component\Ldap\LdapClient;
use Symfony\Component\DependencyInjection\Definition;
$container
->setDefinition('ldap', new Definition(LdapClient::class, array(
'my-server',
389,
3,
false,
true,
));
利用LDAP User Provider取出用戶??
如果你想從一臺(tái)LDAP服務(wù)器中取出用戶信息,你就需要使用 ldap user provider了:
1
2
3
4
5
6
7
8
9
10
11
12
13# app/config/security.ymlsecurity: # ...
providers:my_ldap:ldap:service:ldapbase_dn:dc=example,dc=comsearch_dn:"cn=read-only-admin,dc=example,dc=com"search_password:passworddefault_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
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:srv="http://symfony.com/schema/dic/services"
xsi:schemaLocation="http://symfony.com/schema/dic/services
http://symfony.com/schema/dic/services/services-1.0.xsd">
service="ldap"
base-dn="dc=example,dc=com"
search-dn="cn=read-only-admin,dc=example,dc=com"
search-password="password"
default-roles="ROLE_USER"
uid-key="uid"
/>
1
2
3
4
5
6
7
8
9
10
11
12
13
14$container->loadFromExtension('security', array(
'providers' => array(
'ldap_users' => array(
'ldap' => array(
'service' => 'ldap',
'base_dn' => 'dc=example,dc=com',
'search_dn' => 'cn=read-only-admin,dc=example,dc=com',
'search_password' => 'password',
'default_roles' => 'ROLE_USER',
'uid_key' => 'uid',
),
),
),
);
ldap user provider支持多種不同的配置選項(xiàng):
service??
值類型: string 默認(rèn)值: ldap
這是你所配置的LDAP客戶端的名字。你可以隨便選擇名稱,但必須是程序中的唯一,并且不允許以數(shù)字或空格開頭。
base_dn??
值類型: string 默認(rèn)值: null
這是目錄的base DN。
search_dn??
值類型: string 默認(rèn)值: null
這是你的只讀用戶的DN,用于對(duì)LDAP服務(wù)器進(jìn)行認(rèn)證,以便取出用戶信息。
search_password??
值類型: string 默認(rèn)值: null
這是你的只讀用戶的密碼,用于對(duì)LDAP服務(wù)器進(jìn)行認(rèn)證,以便取出用戶信息。
default_roles??
值類型: array 默認(rèn)值: []
這是你希望分配給“從LDAP服務(wù)器取出的用戶”之默認(rèn)role。如果你不配置此鍵,用戶不會(huì)有任何role,并不被當(dāng)作“完全認(rèn)證”(fully authenticated)的用戶。
uid_key??
值類型: string 默認(rèn)值: sAMAccountName
這是入口點(diǎn)(entry)的key,用作其uid。取決于你的LDAP服務(wù)器之具體落實(shí)(implementation)。常用值是:
sAMAccountName
userPrincipalName
uid
filter??
值類型: string 默認(rèn)值: ({uid_key}={username})
這個(gè)鍵讓你配置哪個(gè)LDAP查詢將被使用。{uid_key} 字符串將被 uid_key 配置值所替換 (默認(rèn)時(shí), sAMAccountName) 和 {username} 字符串將被你“正在嘗試加載的用戶名”給替換。
例如,帶有一個(gè) uid 值的 uid_key,如果你嘗試加載 fabpot 用戶,最終的字符串將會(huì)是: (uid=fabpot)。
當(dāng)然,用戶名會(huì)被轉(zhuǎn)義,為的是防止 LDAP injection。
filter 選項(xiàng)鍵的語法被 RFC4515 所定義。
針對(duì)LDAP服務(wù)器進(jìn)行身份認(rèn)證??
針對(duì)LDAP服務(wù)器進(jìn)行身份認(rèn)證,可以藉由使用form login或是HTTP Basic兩個(gè)authentication providers來完成。
除了兩個(gè)選項(xiàng)鍵之外,它們和“非LDAP”情況下的配置完全一樣:
service??
值類型: string 默認(rèn)值: ldap
這是你所配置的LDAP客戶端的名字。你可以隨便選擇名稱,但必須是程序中的唯一,并且不允許以數(shù)字或空格開頭。
dn_string??
值類型: string 默認(rèn)值: {username}
這個(gè)鍵定義了“用于從用戶名中組成用戶的DN的字符串”的格式。{username} 字符串將被正在認(rèn)證的人的真實(shí)用戶名所替換。
例如,如果你的用戶擁有 uid=einstein,dc=example,dc=com 這樣一個(gè)DN字符串,那么 dn_string 將會(huì)是 uid={username},dc=example,dc=com。
下面給出了 form_login_ldap 和 http_basic_ldap 的配置示例。
表單登陸之配置示例??
1
2
3
4
5
6
7
8
9
10
11
12
13# app/config/security.ymlsecurity: # ...
firewalls:main: # ...form_login_ldap:login_path:logincheck_path:login_check
# ...service:ldapdn_string:'uid={username},dc=example,dc=com'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:srv="http://symfony.com/schema/dic/services"
xsi:schemaLocation="http://symfony.com/schema/dic/services
http://symfony.com/schema/dic/services/services-1.0.xsd">
login-path="login"
check-path="login_check"
service="ldap"
dn-string="uid={username},dc=example,dc=com" />
1
2
3
4
5
6
7
8
9
10
11
12
13$container->loadFromExtension('security', array(
'firewalls' => array(
'main' => array(
'form_login_ldap' => array(
'login_path' => 'login',
'check_path' => 'login_check',
'service' => 'ldap',
'dn_string' => 'uid={username},dc=example,dc=com',
// ...
),
),
)
);
HTTP Basic登錄之配置示例??
1
2
3
4
5
6
7
8
9
10
11# app/config/security.ymlsecurity: # ...
firewalls:main: # ...http_basic_ldap: # ...service:ldapdn_string:'uid={username},dc=example,dc=com'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:srv="http://symfony.com/schema/dic/services"
xsi:schemaLocation="http://symfony.com/schema/dic/services
http://symfony.com/schema/dic/services/services-1.0.xsd">
1
2
3
4
5
6
7
8
9
10
11
12$container->loadFromExtension('security', array(
'firewalls' => array(
'main' => array(
'http_basic_ldap' => array(
'service' => 'ldap',
'dn_string' => 'uid={username},dc=example,dc=com',
// ...
),
'stateless' => true,
),
),
);
總結(jié)
以上是生活随笔為你收集整理的ldap统一用户认证php,针对LDAP服务器进行身份认证的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 卵泡检测多少钱啊?
- 下一篇: 《扶摇皇后》什么时候播出 孟扶摇最后结局