ldap統一用戶認證php,針對LDAP服務器進行身份認證

Symfony提供了不同的方法來配合LDAP服務器使用。

Security組件提供:

ldap user provider,使用的是

form_login_ldap authentication provider,用于針對一臺使用了表單登錄的LDAP服務器。同所有其他user provider一樣,它可以同任何authentication provider一起使用。

http_basic_ldap authentication provider,用于針對一臺使用了HTTP Basic的LDAP服務器。同所有其他user provider一樣,它可以同任何authentication provider一起使用。

這意味著在以下場合是可以工作的:

利用一臺LDAP服務器來比對用戶密碼并取出用戶信息。這可以使用LDAP user provider,以及LDAP form login或LDAP HTTP basic兩個authentication provider中的一種來完成。

利用一臺LDAP服務器來比對用戶密碼,但從另一個資源處取得用戶信息(比如,一個使用了FOSUserBundle的數據庫)。

從一臺LDAP服務器取出用戶信息,同時使用另一種用戶驗證策略(比如,基于token的預驗證)。

LDAP配置參考??

完整的LDAP配置參考 (form_login_ldap, http_basic_ldap, ldap) 請見 SecurityBundle Configuration ("security")。其中一些更有意思的選項在此進行解釋。

配置LDAP客戶端??

所有架構都需要LDAP客戶端被預先配置好。providers被配置為使用一個名為 ldap 的服務,但你也可以在security組件的配置信息中覆寫此項設置。

使用下列配置,一個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取出用戶??

如果你想從一臺LDAP服務器中取出用戶信息,你就需要使用 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支持多種不同的配置選項:

service??

值類型: string 默認值: ldap

這是你所配置的LDAP客戶端的名字。你可以隨便選擇名稱,但必須是程序中的唯一,并且不允許以數字或空格開頭。

base_dn??

值類型: string 默認值: null

這是目錄的base DN。

search_dn??

值類型: string 默認值: null

這是你的只讀用戶的DN,用于對LDAP服務器進行認證,以便取出用戶信息。

search_password??

值類型: string 默認值: null

這是你的只讀用戶的密碼,用于對LDAP服務器進行認證,以便取出用戶信息。

default_roles??

值類型: array 默認值: []

這是你希望分配給“從LDAP服務器取出的用戶”之默認role。如果你不配置此鍵,用戶不會有任何role,并不被當作“完全認證”(fully authenticated)的用戶。

uid_key??

值類型: string 默認值: sAMAccountName

這是入口點(entry)的key,用作其uid。取決于你的LDAP服務器之具體落實(implementation)。常用值是:

sAMAccountName

userPrincipalName

uid

filter??

值類型: string 默認值: ({uid_key}={username})

這個鍵讓你配置哪個LDAP查詢將被使用。{uid_key} 字符串將被 uid_key 配置值所替換 (默認時, sAMAccountName) 和 {username} 字符串將被你“正在嘗試加載的用戶名”給替換。

例如,帶有一個 uid 值的 uid_key,如果你嘗試加載 fabpot 用戶,最終的字符串將會是: (uid=fabpot)。

當然,用戶名會被轉義,為的是防止 LDAP injection。

filter 選項鍵的語法被 RFC4515 所定義。

針對LDAP服務器進行身份認證??

針對LDAP服務器進行身份認證,可以藉由使用form login或是HTTP Basic兩個authentication providers來完成。

除了兩個選項鍵之外,它們和“非LDAP”情況下的配置完全一樣:

service??

值類型: string 默認值: ldap

這是你所配置的LDAP客戶端的名字。你可以隨便選擇名稱,但必須是程序中的唯一,并且不允許以數字或空格開頭。

dn_string??

值類型: string 默認值: {username}

這個鍵定義了“用于從用戶名中組成用戶的DN的字符串”的格式。{username} 字符串將被正在認證的人的真實用戶名所替換。

例如,如果你的用戶擁有 uid=einstein,dc=example,dc=com 這樣一個DN字符串,那么 dn_string 將會是 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,

),

),

);

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/372651.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/372651.shtml
英文地址,請注明出處:http://en.pswp.cn/news/372651.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

每天CookBook之JavaScript-039

IIFE的使用<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>039</title> </head> <body></body> <script type"text/javascript"> (function () {var i 0;fu…

Day-6:創建計算字段

字段&#xff1a;基本上與列的意思相同&#xff0c;經常互換使用&#xff0c;計算字段是運行時在SELECT語句內創建的&#xff0c;不實際存在于數據庫表中。 拼接字段&#xff1a;將值聯結到一起構成單個值 SQL中的SELECT語句中可以使用或||操作符拼接&#xff0c;但mysql中必須…

使用Hibernate加載或保存圖像-MySQL

本教程將引導您逐步了解如何使用Hibernate從數據庫&#xff08; MySQL &#xff09;保存和加載圖像。 要求 對于此示例項目&#xff0c;我們將使用&#xff1a; Eclipse IDE &#xff08;您可以使用自己喜歡的IDE&#xff09;&#xff1b; MySQL &#xff08;您可以使用任何…

javaweb回顧第四篇Servlet異常處理

前言&#xff1a;很多網站為了給用戶很好的用戶體驗性&#xff0c;都會提供比較友好的異常界面&#xff0c;現在我們在來回顧一下Servlet中如何進行異常處理的。 1&#xff1a;聲明式異常處理 什么是聲明式&#xff1a;就是在web.xml中聲明對各種異常的處理方法。 是通過<er…

java開發cs教程,日常運維(一)

w命令&#xff1a;用于查看系統負載、顯示已經登陸系統的用戶列表&#xff0c;并顯示用戶正在執行的指令等信息第一行從左面開始顯示的信息依次為&#xff1a;時間&#xff0c;系統運行時間&#xff0c;登錄用戶數&#xff0c;平均負載。第二行開始以及下面所有的行&#xff0c…

coursera 《現代操作系統》 -- 第五周 同步機制(1)

臨界區塊&#xff08;Critical section&#xff09;指的是一個訪問共用資源&#xff08;例如&#xff1a;共用設備或是共用存儲器&#xff09;的程序片段&#xff0c;而這些共用資源有無法同時被多個線程訪問的特性。&#xff08;不是字面意思的一個區域&#xff0c;是程序片段…

java.lang.NoClassDefFoundError:如何解決–第2部分

本文是我們的NoClassDefFoundError故障排除系列的第2部分。 看一下第1部分 。 它將重點介紹最簡單的NoClassDefFoundError問題類型。 本文對于Java初學者來說是理想的選擇&#xff0c;我強烈建議您自己編譯并運行示例Java程序。 今后將使用以下書寫格式&#xff0c;并為您提供&…

Android開發技術周報 Issue#34

教程 Google Develop for Android 系列 前幾天在G上看到Google Developers站點&#xff0c;有一個Android系列的文章&#xff0c;分享到個人微博&#xff0c;周末閑來沒事就學寫了下&#xff0c;把它們簡單的翻譯了下&#xff0c;沒想到一發不可收拾&#xff0c;六篇文章全部都…

php進度條插件,分享8款優秀的 jQuery 加載動畫和進度條插件_jquery

加載動畫和進度條在網站和 Web 應用中的使用非常流行。雖然網速越來越快&#xff0c;但是我們的網站越來越復雜&#xff0c;同時用戶對網站的使用體驗的要求也越來越高。在內容加載緩慢的時候&#xff0c;使用時尚的加載動畫和進度條告訴用戶還有內容正在加載是一種非常好的方式…

卷積神經網絡(CNN)與特殊的卷積

各種卷積操作的可視化的顯示形式&#xff1a;GitHub - vdumoulin/conv_arithmetic: A technical report on convolution arithmetic in the context of deep learning1. fractionally-strided 卷積 如上圖示&#xff0c;輸入為 33 &#xff0c;想要卷積上采樣成 55 的輸出。需要…

JBoss AS 7:自定義登錄模塊

JBoss AS 7很整潔&#xff0c;但是仍然缺少文檔&#xff08;錯誤消息沒有那么有用&#xff09;。 這篇文章總結了如何創建自己的兼容JavaEE的登錄模塊&#xff0c;以對部署在JBoss AS上的Web應用程序的用戶進行身份驗證。 提供了一個工作的基本用戶名密碼模塊。 為什么要使用Ja…

MySQL安裝步驟及相關問題解決

1. 下載MySQL Server&#xff0c;網址&#xff1a;http://dev.mysql.com/downloads/mysql/ 2. 點擊MySQL5.5.21的安裝文件&#xff0c;出現安裝向導界面&#xff0c;單擊“next”繼續安裝&#xff1a; 3. 選擇接受協議&#xff0c;單擊“next”繼續安裝&#xff1a; 4. 在出現選…

matlab的數學函數,matlab中常見數學函數的使用

matlab中常見數學函數的使用 MATLAB 基本知識 Matlab 的內部常數 pi 圓周率 exp(1) 自然對數的底數 e i 或 j 虛數單位 Inf 或 inf 無窮大 Matlab 的常用內部數學函數 指數函數 exp(x) 以 e 為底數 log(x) 自然對數&#xff0c;即以 e 為底數的對數 log10(x) 常用對數&#xff…

C++中 list與vector的區別

C中 list與vector的區別 引用http://www.cnblogs.com/shijingjing07/p/5587719.html C vector和list的區別 1.vector數據結構vector和數組類似&#xff0c;擁有一段連續的內存空間&#xff0c;并且起始地址不變。因此能高效的進行隨機存取&#xff0c;時間復雜度為o(1);但因為內…

使用Struts 2的查詢網格(無插件)

當將jQuery與struts 2一起使用時&#xff0c;開發人員被說服使用struts2-jQuery插件 。 因為大多數論壇和其他Internet資源都支持struts2 jQuery插件。我有這種經驗。 我想將Struts 2使用jQuery Grid插件&#xff0c;但不使用struts2 jQuery插件。 對于我而言&#xff0c;很難找…

php reflectionmethod,PHP ReflectionMethod getClosure()用法及代碼示例

ReflectionMethod::getClosure()函數是PHP中的一個內置函數&#xff0c;用于為該方法返回動態創建的閉包&#xff0c;否則&#xff0c;在出現錯誤的情況下返回NULL。用法:Closure ReflectionMethod::getClosure ( $object )參數&#xff1a;該函數接受參數對象&#xff0c;該參…

java學習筆記--IO流

第十二章大綱&#xff1a; I/O input/output 輸入/輸出 一、創建文件&#xff0c;借助File類來實現 file.createNewFile() &#xff1a; 創建文件 file.exists() &#xff1a; 判斷文件是否存在&#xff0c;如果存在&#xff0c;則返回true delete() &#xff1a; 刪除文件&…

linux命令之kill篇

作業四&#xff1a;查詢firewall進程&#xff0c;然后殺死 [rootlocalhost 桌面]# ps -aux |grep firewall root 772 0.0 2.0 327912 20704 ? Ssl 15:23 0:00 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid root 5323 0.0 0.0 112660…

ActiveMQ網絡連接器

這篇文章對我和任何對網絡連接器如何為ActiveMQ工作感興趣的ActiveMQ貢獻者而言都是更多的內容。 我最近花了一些時間查看代碼&#xff0c;并認為最好畫一些快速的圖表來幫助我記住我學到的東西&#xff0c;并在將來發現問題時幫助將來確定在哪里進行調試。 如果我輸入有誤&…

《程序設計與數據結構》第3周學習總結

學號 20162317 《程序設計與數據結構》第3周學習總結 教材學習內容總結 第三章的內容相比之前兩章更為具體&#xff0c;介紹的內容更為集中&#xff0c;主要說到了類和對象的問題&#xff0c;其中也仔細介紹了String類、Random類、Math類、NumberFormat類等類。此外也說到了與類…