做者:阿東
微信公衆號:傑哥的IT之旅(ID:Jake_Internet)
1、單點登陸
一、原理
單點登陸SSO(Single Sign on):一個多系統共存的環境下,用戶在一處的登陸後,就不用在其餘系統中登陸,也就是用戶的一次登陸能獲得其餘全部系統的信任。sql
如下兩個是要點:數據庫
存儲信任vim
驗證信任api
單點登陸實現方式:
1.1 以Cookie做爲憑證媒介
最簡單的單點登陸實現方式,是使用cookie做爲媒介,存放用戶憑證。用戶登陸父應用後,應用返回一個加密的cookie,當用戶訪問子應用的時候,會攜帶這個cookie,受權應用解密cookie並進行驗證,校驗經過則登陸當前用戶,此方式:cookie不安全,不能跨域實現免密登陸。跨域
1.2 經過JSONP實現
對於跨域問題,能夠採用JSONP實現安全
用戶在父應用登陸後,跟session匹配的cookie會存到客戶端中,當用戶須要登陸子應用時,受權應用訪問父應用提供的JSONP接口,並在請求中帶上父應用域名下的cookie,父應用接收到請求,驗證用戶的登陸狀態,返回加密的信息,子應用經過解析返回來的加密信息來驗證用戶,若是經過驗證則登陸用戶。服務器
1.3 經過頁面重定向的方式
經過父應用和子應用來回重定向進行通訊,實現信息的安全傳遞。微信
父應用提供一個GET方式的登陸接口,用戶經過子應用重定向鏈接的方式訪問這個接口,若是用戶尚未登陸,則返回一個登陸頁面,用戶輸入帳號密碼進行登陸。若是用戶已經登陸了,則生成加密的Token,而且重定向到子應用提供的驗證Token的接口,經過解密和校驗以後,子應用登陸當前用戶。cookie
此方法解決了安全問題和跨域問題,可是沒有前面兩種方便。session
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);
三、對象類:與某個實體類型對應的一組屬性,對象類是能夠繼承的,這樣父類的必需屬性也會被繼承下來;
四、屬性:描述條目的某個方面的信息,一個屬性由一個屬性類型和一個或多個屬性值組成,屬性由必需屬性和非必需屬性;
關鍵字含義
Rdn Relative dn 相對辨別名,相似於文件系統中的相對路徑,它是與目錄樹結構無關的部分,如「uid=tom」,或‘cn=exmaple’
信息模型:在ldap信息以樹狀方式組織,在樹狀信息中的基本數據單元是條目,而每一個條目由屬性構成,屬性中存儲有屬性值;
命令模型:在ldap中的條目定位方式,在ldap中每一個條目均有本身的DN,DN是該條目在整個樹中惟一名稱標識,如同文件系統中,帶路徑的文件名就是DN;
功能模型:在ldap中共有四類10中操做:查詢操做,如搜索、比較,更新類操做,如添加條目,刪除條目,修改條目,修改條目名,認證類操做,如綁定,其餘操做:如放棄和擴展操做。擴展操做:有修改密碼和startTLS擴展;
安全模型:ldap中的安全模型主要經過身份認證、安全通道和訪問控制來實現;
信息組織
目錄條目以層次型的樹狀結構來組織。反應地域和組織機構界限。
樹能夠根據互聯網域名組織,容許使用DNS爲目錄服務定位。
最頂層即根乘坐「基準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