W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
這種認證方法操作起來類似于password
,只不過它使用 LDAP 作為密碼驗證方法。LDAP 只被用于驗證用戶名/口令對。因此,在使用 LDAP 進行認證之前,用戶必須已經(jīng)存在于數(shù)據(jù)庫中。
LDAP 認證可以在兩種模式下操作。在第一種模式中(我們將稱之為簡單綁定模式),服務器將綁定到構(gòu)造成prefix
username
suffix
的可區(qū)分名稱。通常,prefix
參數(shù)被用于指定
cn=
或者一個活動目錄環(huán)境中的DOMAIN
\
。suffix
被用來指定非活動目錄環(huán)境中的DN的剩余部分。
在第二種模式中(我們將稱之為搜索與綁定模式),服務器首先用一個固定的用戶名和密碼(用ldapbinddn
和ldapbindpasswd
指定)綁定到 LDAP 目錄 ,并為試圖登入該數(shù)據(jù)庫的用戶執(zhí)行一次搜索。如果沒有配置用戶名和密碼, 將嘗試一次匿名綁定到目錄。搜索將在位于ldapbasedn
的子樹上被執(zhí)行,并將嘗試做一次
ldapsearchattribute
中指定屬性的精確匹配。一旦在這次搜索中找到用戶,服務器斷開并且作為這個用戶重新綁定到目錄,使用由客戶端指定的口令來驗證登錄是正確的。這種模式與在其他軟件中的 LDAP 認證所使用的相同,例如 Apache mod_authnz_ldap
和 pam_ldap
。這種方法允許位于目錄中用戶對象的更大靈活性,但是會導致建立兩個到 LDAP 服務器的獨立連接。
下列配置選項被用于兩種模式:
ldapserver
要連接的LDAP服務器的名稱或IP地址??梢灾付ǘ鄠€服務器,用空格分隔。
ldapport
要連接的LDAP服務器的端口號。如果沒有指定端口,LDAP庫的默認端口設置將被使用。
ldapscheme
設置為ldaps
可以使用LDAPS。這是一種非標準的在SSL之上使用LDAP的方法,在有一些LDAP服務器實現(xiàn)上可以支持。其他選擇還可以參考ldaptls
選項。
ldaptls
設置為1以使PostgreSQL和LDAP服務器之間的連接使用TLS加密。這會按照RFC 4513使用StartTLS
操作。其他選擇還可以參考ldapscheme
選項。
注意使用ldapscheme
或ldaptls
僅會加密PostgreSQL服務器和LDAP服務器之間的通信。PostgreSQL服務器和PostgreSQL客戶端之間的連接仍是未加密的,除非也在其上使用SSL。
下列選項只被用于簡單綁定模式:
ldapprefix
當做簡單綁定認證時,前置到用戶名形成要用于綁定的DN的字符串。
ldapsuffix
當做簡單綁定認證時,前置到用戶名形成要用于綁定的DN的字符串。
下列選項只被用于搜索與綁定模式:
ldapbasedn
當做搜索與綁定認證時,開始搜索用戶的根DN。
ldapbinddn
當做搜索與綁定認證時,用戶要綁定到目錄開始執(zhí)行搜索的DN。
ldapbindpasswd
當做搜索與綁定認證時,用戶用于綁定到目錄開始執(zhí)行搜索的口令。
ldapsearchattribute
當做搜索與綁定認證時,在搜索中用來與用戶名匹配的屬性。如果沒有指定屬性,將會使用uid
屬性。
ldapsearchfilter
在做search+bind認證時使用的搜索過濾器。$username
的出現(xiàn)將被替換為用戶名。這允許比ldapsearchattribute
更加靈活的搜索過濾器。
ldapurl
一個RFC 4516 LDAP URL。這是一種用更緊湊和標準的形式書寫某些其他LDAP選項的可選方法。格式是
ldap[s]://host
[:port
]/basedn
[?[attribute
][?[scope
][?[filter
]]]]
scope
必須是base
、one
、sub
之一,通常是最后一個(默認是base
,但它在這個應用中通常沒啥用)。attribute
可以指定一個屬性,在這種情況中它被用作
ldapsearchattribute
的一個值。如果attribute
為空,那么filter
可以被用作ldapsearchfilter
的一個值。
URL模式ldaps
選擇LDAPS方法來在SSL上建立LDAP連接,等效于使用ldapscheme=ldaps
。要使用StartTLS
操作加密LDAP連接,可以用普通的URL模式ldap
并且在ldapurl
之外指定
ldaptls
選項。
對于非匿名綁定,ldapbinddn
和ldapbindpasswd
必須被指定為獨立選項。
LDAP URL 當前只支持OpenLDAP,而不支持 Windows。
將簡單綁定的選項中混合用于搜索與綁定的選項是一種錯誤。
在使用search+bind模式時,可以用ldapsearchattribute
指定的單個屬性執(zhí)行搜索,或者使用ldapsearchfilter
指定的自定義搜索過濾器執(zhí)行搜索。指定ldapsearchattribute=foo
等效于指定ldapsearchfilter="(foo=$username)"
。如果兩個選項都沒有被指定,則默認為
ldapsearchattribute=uid
。
如果PostgreSQL與OpenLDAP一起編譯為LDAP客戶端庫,ldapserver
設置可能被省略。 在這種情況下,主機名和端口列表通過RFC 2782 DNS SRV記錄來進行查詢。 查詢名稱_ldap._tcp.DOMAIN
,DOMAIN
是從
ldapbasedn
中摘取的。
這里是一個簡單綁定 LDAP 配置的例子:
host ... ldap ldapserver=ldap.example.net ldapprefix="cn=" ldapsuffix=", dc=example, dc=net"
當請求一個作為數(shù)據(jù)庫用戶someuser
到數(shù)據(jù)庫服務器的連接時,PostgreSQL 將嘗試使用cn=someuser, dc=example, dc=net
和客戶端提供的口令來綁定到 LDAP 服務器。如果那個連接成功,將被授予數(shù)據(jù)庫訪問。
這里是一個搜索與綁定配置的例子:
host ... ldap ldapserver=ldap.example.net ldapbasedn="dc=example, dc=net" ldapsearchattribute=uid
當請求一個作為數(shù)據(jù)庫用戶someuser
到數(shù)據(jù)庫服務器的連接時,PostgreSQL 將嘗試匿名綁定(因為沒有指定ldapbinddn
)到 LDAP 服務器,在指定的基礎 DN 下執(zhí)行一次對于(uid=someuser)
的搜索。如果找到一個項,則它將嘗試使用找到的信息和客戶端提供的口令進行綁定。如果第二個連接成功,將被授予數(shù)據(jù)庫訪問。
這里是被寫成一個 URL 的相同搜索與綁定配置:
host ... ldap ldapurl="ldap://ldap.example.net/dc=example,dc=net?uid?sub"
一些支持根據(jù) LDAP 認證的其他軟件使用相同的 URL 格式,因此很容易共享該配置。
這里是一個search+bind配置的例子,它使用ldapsearchfilter
而不是ldapsearchattribute
來允許用用戶ID或電子郵件地址進行認證:
host ... ldap ldapserver=ldap.example.net ldapbasedn="dc=example, dc=net" ldapsearchfilter="(|(uid=$username)(mail=$username))"
這是一個search+bind配置的例子,它使用DNS SRV discovery來查找域名example.net
的LDAP服務的主機名和端口。
host ... ldap ldapbasedn="dc=example,dc=net"
如例子中所示,由于 LDAP 通常使用逗號和空格來分割一個 DN 的不同部分,在配置 LDAP 選項時通常有必要使用雙引號包圍的參數(shù)值。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: