單點登錄(一)| LDAP 協議

單點登錄(一)| LDAP 協議

作者:阿東
微信公衆號:傑哥的IT之旅(ID:Jake_Internet)

一、單點登錄

1、原理
單點登錄SSO(Single Sign on):一個多系統共存的環境下,用戶在一處的登錄後,就不用在其他系統中登錄,也就是用戶的一次登錄能得到其他所有系統的信任。



以下兩個是要點:

存儲信任

驗證信任

單點登錄實現方式:
1.1 以Cookie作爲憑證媒介
最簡單的單點登錄實現方式,是使用cookie作爲媒介,存放用戶憑證。用戶登錄父應用後,應用返回一個加密的cookie,當用戶訪問子應用的時候,會攜帶這個cookie,授權應用解密cookie並進行驗證,校驗通過則登錄當前用戶,此方式:cookie不安全,不能跨域實現免密登錄。

單點登錄(一)| LDAP 協議
1.2 通過JSONP實現
對於跨域問題,可以採用JSONP實現

用戶在父應用登錄後,跟session匹配的cookie會存到客戶端中,當用戶需要登錄子應用時,授權應用訪問父應用提供的JSONP接口,並在請求中帶上父應用域名下的cookie,父應用接收到請求,驗證用戶的登錄狀態,返回加密的信息,子應用通過解析返回來的加密信息來驗證用戶,如果通過驗證則登錄用戶。

單點登錄(一)| LDAP 協議
1.3 通過頁面重定向的方式
通過父應用和子應用來回重定向進行通信,實現信息的安全傳遞。

父應用提供一個GET方式的登錄接口,用戶通過子應用重定向連接的方式訪問這個接口,如果用戶還沒有登錄,則返回一個登錄頁面,用戶輸入賬號密碼進行登錄。如果用戶已經登錄了,則生成加密的Token,並且重定向到子應用提供的驗證Token的接口,通過解密和校驗之後,子應用登錄當前用戶。

此方法解決了安全問題和跨域問題,但是沒有前面兩種方便。

單點登錄(一)| LDAP 協議
1.4 使用獨立登錄系統
一般來說,大型應用會把授權的邏輯與用戶信息的相關邏輯獨立成一個應用,稱爲用戶中心。用戶中心不處理業務邏輯,只是處理用戶信息的管理及授權給第三方應用,第三方應用需要登錄的時候,則把用戶的登錄請求轉發給用於中心進行處理,用戶處理完畢返回憑證,第三方應用驗證憑證,通過後就登錄用戶。

二、LDAP 協議
2.1 介紹
目錄服務:一個特殊的數據庫,用來保存描述性的、基於屬性的詳細信息,支持過濾功能;是動態的、靈活的、易擴展的。

LDAP:基於X.500標準的輕量級目錄訪問協議。

目錄是一個爲查詢、瀏覽和搜索而優化的數據庫,它成樹狀結構組織數據,類似文件目錄一樣。

目錄數據庫和關係數據庫不同,有優異的讀性能,但寫性能很差,並且沒有事務處理、回滾等複雜功能,不適於存儲修改頻繁的數據。

LDAP 目錄服務是由目錄數據庫和一套訪問協議組成的系統

LDAP 是開放的internet標準,支持跨平臺的internet的協議。

LDAP:輕量級目錄訪問協議,LDAP僅僅是一個訪問協議。

應用:ldap用來構建同一的賬號管理、身份驗證平臺,實現sso單點登錄機制。

2.2 特點
基於TCP/IP

以樹狀結構存儲數據

讀取速度快,寫入速度慢

採用client-server模型,服務器用於存放數據,客戶端用於操作數據

跨平臺、維護簡單

支持SSL/TLS加密

協議是開放的

2.3 基本模型
目錄樹概念
1、目錄樹:在一個目錄服務系統中,整個目錄信息集可以表示一個目錄信息樹,樹中的每個節點是一個條目;

2、條目:每個條目就是一條記錄。每個條目有自己的唯一可以區別的名稱(DN);

3、對象類:與某個實體類型對應的一組屬性,對象類是可以繼承的,這樣父類的必需屬性也會被繼承下來;

4、屬性:描述條目的某個方面的信息,一個屬性由一個屬性類型和一個或多個屬性值組成,屬性由必需屬性和非必需屬性;

關鍵字含義
單點登錄(一)| LDAP 協議
單點登錄(一)| LDAP 協議
Rdn Relative dn 相對辨別名,類似於文件系統中的相對路徑,它是與目錄樹結構無關的部分,如“uid=tom”,或‘cn=exmaple’
信息模型:在ldap信息以樹狀方式組織,在樹狀信息中的基本數據單元是條目,而每個條目由屬性構成,屬性中存儲有屬性值;



命令模型:在ldap中的條目定位方式,在ldap中每個條目均有自己的DN,DN是該條目在整個樹中唯一名稱標識,如同文件系統中,帶路徑的文件名就是DN;

功能模型:在ldap中共有四類10中操作:查詢操作,如搜索、比較,更新類操作,如添加條目,刪除條目,修改條目,修改條目名,認證類操作,如綁定,其他操作:如放棄和擴展操作。擴展操作:有修改密碼和startTLS擴展;

安全模型:ldap中的安全模型主要通過身份認證、安全通道和訪問控制來實現;

信息組織
目錄條目以層次型的樹狀結構來組織。反應地域和組織機構界限。

單點登錄(一)| LDAP 協議
樹可以根據互聯網域名組織,允許使用DNS爲目錄服務定位。

單點登錄(一)| LDAP 協議
最頂層即根乘坐“基準DN(baseDN)”,如“dc=example,dc=com”或“o=example.org”
OU(organization Unit)用來表示公司內部機構,如部門等,也可表示設備、人員等。

openLDAP
openLDAP是LDAPv3協議的具體實現,可以支持多平臺,以提供目錄服務,其進程爲slapd。

安裝
環境:
Centos-7
Openldap-2.4.44


使用yum安裝openldap服務端、客戶端等相關組件(需要epel源)

# sudo yum install -y epel-release
# sudo yum install -y openldap openldap-servers openldap-clients openldap-servers-sql openldap-devel migrationtools compat-openldap

安裝完成後查看版本號

# slapd -V

創建管理員密碼,使用slappasswd命令生成加密字段


# slappasswd -s you_passwd

修改openldap配置文件,配置文件存放位置:/etc/openldap/slapd.d中

# vim /etc/openldap/slapd.d/cn=confg/olcDatabase={2}hdb.ldif

olcRootPW: {SSHA}xxxxxx
olcSuffix:dc=example,dc=com  #dc修改域名
olcRootDN: cn=admin,dc=example,dc=com  #admin爲管理員賬號

# vim /etc/openldap/slapd.d/cn=confg/olcDatabase={1}monitor.ldif
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=extern
al,cn=auth" read by dn.base="cn=Manager,dc=hzins,dc=com" read by * none  #修改dc信息爲自己的域名

驗證配置文件是否正確

# slaptest -u

啓動服務,openldap監聽在389端口

# systemctl enable slapd
# systemctl start slapd 
# firewall-cmd –add-service=ldap –permanent 
# firewall-cmd –add-port=389/tcp –permanent

Openldap使用數據庫是BerkeleyDB,需要複製一份配置文件到合適目錄中,並修改權限

# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
# chown ldap:ldap -R /var/lib/ldap
# chmod 700 -R /var/lib/ldap

導入基本的Schema表結構

# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif

修改migrate_common.ph文件,該文件的信息會用於生成ldif文件

# vim /usr/share/migrationtools/migrate_common.ph
$DEFAULT_MAIL_DOMAIN = “example.com”; #大約在71行
$DEFAULT_BASE = “dc=example,dc=com”;
$EXTENDED_SCHEMA = 1;

使用兩個migrate_base.pl腳本生成base.ldif文件,然後將該文件加載到openldap的數據庫

# ./migrate_base.pl > /root/base.ldif
# ldapadd -x -W -D “cn=admin,dc=example,dc=com” -f /root/base.ldif

Openldap開啓日誌記錄

1)首先創建日誌文件,並調整權限,在修改rsyslog.con

# mkdir -p /var/log/slapd
# chown ldap:ldap /var/log/slapd
# touch /var/log/slapd/slapd.log
# chow ldap.ldap /var/log/slapd/slapd.log
# vim /etc/rsyslog.conf
Local4.*       /var/log/slapd/slapd.log
# systemctl restart rsyslog

2)修改數據庫配置文件

# vim log.ldif
dn: cn=config
changetype: modify
add: olcLogLevel
olcLogLevel: 32
# ldapmodify -Y EXTERNAL -H ldapi:/// -f log.ldif

3)進行日誌切割配置


# vim /etc/logrotate.d/ldap
/var/log/slapd/slapd.log {
        prerotate
              /usr/bin/chattr -a /var/log/slapd/slapd.log
        endscript
        compress
        delaycompress
         notifempty
         rotate 100
         size 10M
         postrotate
              /usr/bin/chattr +a /var/log/slapd/slapd.log
         endscript
}

管理
Web端管理:Phpldapadmin
工具管理:Ldapadmin、ApacheDirectoryStud

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章