Choerodon 豬齒魚是開源多云應(yīng)用平臺,是基于 Kubernetes 的容器編排和管理能力,整合 DevOps 工具鏈、微服務(wù)和移動應(yīng)用框架,來幫助企業(yè)實(shí)現(xiàn)敏捷化的應(yīng)用交付和自動化的運(yùn)營管理,并提供 IoT、支付、數(shù)據(jù)、智能洞察、企業(yè)應(yīng)用市場等業(yè)務(wù)組件,來幫助企業(yè)聚焦于業(yè)務(wù),加速數(shù)字化轉(zhuǎn)型。
Choerodon 可以通過配置LDAP的方式對接已有的用戶,使用LDAP的賬號和密碼即可登錄到Choerodon平臺。

什么是LDAP
LDAP是輕量級目錄訪問協(xié)議(Lightweight Directory Access Protocol)的縮寫,是一個開放的,中立的,工業(yè)標(biāo)準(zhǔn)的應(yīng)用協(xié)議,用于與目錄服務(wù)進(jìn)行交互。LDAP有許多種實(shí)現(xiàn),比如Open LDAP和微軟的Active Directory等,類似于關(guān)系型數(shù)據(jù)庫的多種不同的實(shí)現(xiàn),如oracle和mysql等。
LDAP基于TCP/IP協(xié)議,使用Client/Server架構(gòu),允許客戶端在目錄服務(wù)器中執(zhí)行各種操作,包括存儲和檢索數(shù)據(jù),搜索與給定標(biāo)準(zhǔn)集匹配的數(shù)據(jù),對客戶端進(jìn)行身份驗(yàn)證等。LDAP的標(biāo)準(zhǔn)TCP端口對于未加密的通信是389,對于通過TLS加密的通道的LDAP是636,這里可以類比HTTP協(xié)議默認(rèn)端口為80,HTTPS協(xié)議默認(rèn)端口為443。
LDAP目錄使用有層次的、樹形結(jié)構(gòu)存儲數(shù)據(jù),具有優(yōu)異的查詢,瀏覽和搜索性能,但寫入性能差,沒有事務(wù)處理和回滾等功能,不適合頻繁修改數(shù)據(jù)。通常用于存儲公司員工信息,用戶使用同一個賬戶和密碼就可以登錄到多個不同的服務(wù),也可以存儲公用證書和安全密鑰,公司物理設(shè)備信息等。
基本概念
Directory Servers
目錄服務(wù)器是一種存儲樹形條目信息的網(wǎng)絡(luò)數(shù)據(jù)庫,與關(guān)系型數(shù)據(jù)庫存儲行和列的關(guān)系信息不同,可以被認(rèn)為一種NoSQL數(shù)據(jù)庫。
Entries
LDAP entry(LDAP條目)是有關(guān)實(shí)體的信息集合,每個條目由下面三部分組成:DN,屬性集合(attributes)和對象類集合(object class)。
DNs and RDNs
DN是distinguished name的縮寫,是entry的唯一標(biāo)識,同時記錄了entry所在的目錄樹層級位,類似于文件系統(tǒng)的上下文路徑。
一個DN由零個或多個相對可分辨的名稱或者RDN組成。每個RDN由一個或者多個屬性-值組成(通常是一個)。例如uid=superlee,dc=choerodon,dc=io這個DN,由3個RDN組成,RDN的順序指定了DIT(directory information tree)中相關(guān)條目的位置,從左到右以降序表示層級結(jié)構(gòu),即父目錄在偏右側(cè),上述DN的父目錄的DN為ou=choerodon,ou=io,uid是RDN的屬性,superlee是RDN的值。
Root DSE是一個長度為0的字符串DN的特殊條目,每一個LDAP server 必須要有一個這樣公開的特殊條目。
Attributes
Attributes用于保存條目的數(shù)據(jù)。一個條目可以有多個attribute,每一個attribute都有一個attribute type (屬性類型),零個或多個attribute options(屬性選項(xiàng))以及一組包含實(shí)際數(shù)據(jù)的值。
屬性類型指定LDAP client和server應(yīng)該如何處理該屬性,必須包含對象標(biāo)識符(OID)和零個或多個名稱。
屬性選項(xiàng)不常用,但是可以提供一些元數(shù)據(jù),如對該屬性的值進(jìn)行多語言處理。
如圖所示,該entry包含了多個attribute

Object Classes
對象類標(biāo)記條目的類型,每個條目有一個結(jié)構(gòu)對象類,指明條目所代表的對象類型(person/group/device等),還有零個或多個輔助對象類,提供其他特征。
Object Identifiers (OIDs)
對象標(biāo)識符,用于唯一標(biāo)識LDAP協(xié)議中的各種元素,OID由一系列由句點(diǎn)分隔的數(shù)字組成(例如,“1.2.840.113556.1.4.473”是表示服務(wù)器端排序請求控件的OID)。
可以使用ldapsearch命令查詢LDAP server是否支持分頁查詢。
ldapsearch -H ldap://ldap.server.address:389 -x -D "uid=superlee,dc=choerodon,dc=io" -W -b "" -s base -a always "(objectClass=*)
如果返回值里包含1.2.840.113556.1.4.473,那么服務(wù)器就是支持分頁查詢的。
其他術(shù)語
-
base DN: 基準(zhǔn)DN,通常指一個屬性結(jié)構(gòu)的頂部,如下的樹形結(jié)構(gòu)的base DN就是dc=gp,dc=gl,dc=google,dc=com

-
DIT: directory information tree -
entryUUID: 包含DIT條目的通用唯一ID(UUID)的屬性。 -
LDIF: LDAP數(shù)據(jù)交換格式。IETF術(shù)語,用于加載(導(dǎo)入)和保存(導(dǎo)出)條目到LDAP啟用目錄的文本格式。用于數(shù)據(jù)的導(dǎo)入導(dǎo)出,每行都是“屬性: 值”對,見openldap ldif格式示例 -
dc: domain component,通常指域名的每個組件,如www.baidu.com可以被寫成dc=www,dc=baidu,dc=com -
cn: commonName,被廣泛用作命名某些“東西”或真實(shí)世界實(shí)體的屬性。 -
ou: organizational unit name,表明用戶所屬的組織單元,屬于多個組織使用逗號隔開。 -
l: locality name,局部名,地方名 -
st: state or province name,州或者省份名稱 -
o: organizational name -
c: country name -
street: street name -
uid: user id
Choerodon LDAP使用
這里做一些補(bǔ)充說明。
Choerodon的LDAP在組織層級,即每個組織都有各自的LDAP配置,配置好LDAP后即可同步到當(dāng)前組織下,用戶登錄的時候根據(jù)登錄名查詢對應(yīng)的組織,然后找到對應(yīng)的LDAP server去認(rèn)證,認(rèn)證通過則登錄成功,否則則登錄失敗。
如果組織下的LDAP已經(jīng)被停用,則該組織下的所有LDAP用戶都不能登錄。
Choerodon只支持可以分頁查詢的LDAP server。

2: 主機(jī)名,即ldap server的地址,需要以ldap://或者ldaps://開頭。
4: 這個值是每次分頁查詢用戶的數(shù)量以及發(fā)送saga事件的用戶數(shù)量。
5: 查詢和連接LDAP server的超時時間,單位為秒。
注意:
管理員登錄賬戶和密碼,要有在base DN上的登錄權(quán)限,否則測試連接會報登錄失敗。

- 1: 用戶對象類,一般設(shè)置為person,用于檢索符合這個類型的條目。支持輸入多個object class,使用逗號分隔。
- 2: 讀取entry的該屬性設(shè)置到iam_user表的login_name字段,作為登錄名。
- 6: uuid,LDAP對象的唯一標(biāo)識,大多數(shù)是'entryUUID'屬性,Microsoft Active Directory可能是'objectGUID'屬性,如果您的的ldap服務(wù)器確實(shí)不支持uuid,使用能唯一標(biāo)識對象的字段即可,比如'uid'或者'entryDN'。記錄部分用戶同步失敗的uuid,方便到LDAP server查詢。
- 7: 額外的過濾條件用于同步用戶,允許為空,表達(dá)式必須以'('開始,以')'結(jié)束,語法參考ldap search syntax。
注意:
測試連接里的屬性匹配,抓取了base DN下的100個滿足已經(jīng)設(shè)置的用戶對象類和自定義篩選條件的條目,然后去校驗(yàn)設(shè)置好的loginName,email等
屬性是否存在,如果不存在該屬性名就返回不匹配。
