單點登陸(一)| LDAP 協議

單點登陸(一)| LDAP 協議

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

1、單點登陸

一、原理
單點登陸SSO(Single Sign on):一個多系統共存的環境下,用戶在一處的登陸後,就不用在其餘系統中登陸,也就是用戶的一次登陸能獲得其餘全部系統的信任。sql

如下兩個是要點:數據庫

存儲信任vim

驗證信任api

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

單點登陸(一)| LDAP 協議
1.2 經過JSONP實現
對於跨域問題,能夠採用JSONP實現安全

用戶在父應用登陸後,跟session匹配的cookie會存到客戶端中,當用戶須要登陸子應用時,受權應用訪問父應用提供的JSONP接口,並在請求中帶上父應用域名下的cookie,父應用接收到請求,驗證用戶的登陸狀態,返回加密的信息,子應用經過解析返回來的加密信息來驗證用戶,若是經過驗證則登陸用戶。服務器

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

父應用提供一個GET方式的登陸接口,用戶經過子應用重定向鏈接的方式訪問這個接口,若是用戶尚未登陸,則返回一個登陸頁面,用戶輸入帳號密碼進行登陸。若是用戶已經登陸了,則生成加密的Token,而且重定向到子應用提供的驗證Token的接口,經過解密和校驗以後,子應用登陸當前用戶。cookie

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

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

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

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

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

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

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

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

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

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

2.2 特色
基於TCP/IP

以樹狀結構存儲數據

讀取速度快,寫入速度慢

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

跨平臺、維護簡單

支持SSL/TLS加密

協議是開放的

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

二、條目:每一個條目就是一條記錄。每一個條目有本身的惟一能夠區別的名稱(DN);

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

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

關鍵字含義
單點登陸(一)| 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

相關文章
相關標籤/搜索