實施身份驗證系統(tǒng)
一、在互聯(lián)網(wǎng)實施SSO
1.可擴展標記語言(XML)
XML可以包含標記,用于將數(shù)據(jù)描述為所需的任何內(nèi)容??捎脕韨鬏敽痛鎯?shù)據(jù),組織使用基于XML的語言來共享身份驗證信息和授權(quán)信息。
2.安全斷言標記語言(SAML) 重點
安全斷言標記語言是一種XML標準,允許在安全域之間共享身份驗證和授權(quán)數(shù)據(jù)的交換。(交換數(shù)據(jù))
SAML 2.0規(guī)范使用三個實體:
委托人或用戶代理(Principal or Agent) --- 就是用戶
服務(wù)提供者(Service Provider,SP) --- 微博,我用微信的身份登錄微博
身份提供者(Identity Provider,IdP) --- 微信,我用微信完成身份驗證
IdP可以發(fā)送三種類型的斷言:
身份驗證斷言(Authentication Assertion):提供證明用戶代理提交了正確的憑據(jù),并標識了身份識別方法和用戶登錄時間。
授權(quán)斷言(Ahthorization Assertion):提供是否授權(quán)用戶代理訪問請求的服務(wù)。
屬性斷言(Attribute Assertion):提供有關(guān)用戶代理的任何信息。
3.Oauth (不是重點)
Oauth 2.0是一個授權(quán)框架,不是身份驗證協(xié)議,通過交換API消息發(fā)放令牌進行授權(quán)。
OAuth提供了從另一個服務(wù)訪問資源的能力。OAuth 是一個面向第三方的開放授權(quán)(而非身份驗證)標準。對于該技術(shù),一般認為,這允許用戶授權(quán)網(wǎng)站使用用戶在其他網(wǎng)站控制的東西。用戶允許Web 站點訪問第三方。
4.OpenID
OpenID 是第三方進行用戶身份驗證的開放標準。(站點提供方允許在應(yīng)用程序中使用來自另一個服務(wù)的賬戶。)
5.OIDC(就是OpenID + OAuth)
OpenID Connect是一種基于JSON的RESTful身份驗證協(xié)議,與OAuth配合使用時,可以提供身份驗證和基本配置文件信息。OIDC 最常見的用法是,允許Web 應(yīng)用程序(依賴方)使用第三方IdP 對最終用戶進行身份驗證,同時可從該IdP 獲取有關(guān)該用戶的信息。
6.比較SAML、OAuth、OpenID和OIDC
SAML使用斷言來傳遞身份驗證和授權(quán)信息,OIDC使用JWT來傳遞身份驗證和授權(quán)信息。SAML的兄弟概念:
服務(wù)配置標記語言(SPML):基于XML,專門為交換用戶信息而設(shè)計,即用于同步創(chuàng)建、修改、刪除賬號。(交換配置)
可擴展訪問控制標記語言(XACML):用于在XML格式中定義訪問控制策略,通常用于實現(xiàn)RBAC。
------------------------------------------------------
二、內(nèi)部網(wǎng)絡(luò)實施SSO
1.AAA協(xié)議
用于提供身份驗證,授權(quán)和記賬的協(xié)議被稱為AAA協(xié)議,為遠程訪問系統(tǒng)提供集中訪問控制。
2.Kerberos
Kerberos是一種票據(jù)身份驗證機制,V5版本使用對稱加密算法AES來保護機密性。
Kerberos核心組件:

密鑰分發(fā)中心(KDC):管理所有成員的對稱密鑰,用于身份驗證的可信第三方。
AS(Authentication Service):初始化授權(quán)認證。
TGT(Ticket granting ticket):臨時票據(jù),AS臨時發(fā)放TGT。(電影票的付款記錄)
TGS(Ticket Granting Service):負責票據(jù)管理(正式票據(jù))
Ticket:正式票據(jù),客戶可以用它來向服務(wù)器證明自己的身份(在電影院換的正式票據(jù))
流程:
1.AES加密用戶名,發(fā)送給KDC,這個過程不發(fā)送任何密碼;
2.KDC解密用戶名通過認證,使用客戶端密碼的哈希值加密臨時密鑰(KeyC-S)
3.生成加密(KDC密碼的哈希值加密)帶有時間戳的授予票證TGT,這里要注意的是,用的是KDC的密碼進行哈希,所以無法被客戶端解密。
4.發(fā)送加密的臨時密鑰和加密帶時間戳的授予票證TGT給客戶端。這時客戶端可以解出臨時密鑰,無法解出TGT,只能使用。
5.使用客戶端密碼進行哈希獲取哈希值從而解出臨時密鑰,并安裝TGT。
6.將TGT發(fā)送給KDC,請求訪問服務(wù)器。
7.KDC生成服務(wù)票據(jù)ST(臨時密鑰KeyC-S被KeyC和KeyS分別加密,含客戶端信息)發(fā)送給客戶端。這里的臨時密鑰與之前不同,是客戶端和服務(wù)器之間通信使用的。
8.客戶端使用KeyC解密臨時密鑰KeyC-S,解密臨時密鑰和ST。
9.客戶端將服務(wù)票據(jù)ST發(fā)送給服務(wù)器。
10.服務(wù)端用自己的KeyS解出臨時密鑰KeyC-S,使用臨時密鑰解密客戶端信息
注:預(yù)身份驗證,如果這個安全功能打開,則第一步需要客戶端用自己的密碼哈希去加密時間戳發(fā)送給KDC,KDC能夠解出,從而證明客戶端確實擁有這個密碼。
零知識證明的簡單理解:你能解出來,證明你是,而不是你提供了身份信息,所以你是。
風險點:
1、KDC是一個單點故障,如果KDC出現(xiàn)故障,沒有人能獲得所需的資源。冗余的KDC是必要的。
2、KDC必須能夠?qū)崟r處理收到的大量請求。它必須是可擴展。
3、秘鑰臨時存儲在用戶工作站上,這意味著入侵者有可能獲得這些秘鑰。
4、Kerberos容易遭受密碼猜測攻擊。KDC不知道是否發(fā)生字典攻擊。
5、如果沒有應(yīng)用加密,那么Kerberos不能保護網(wǎng)絡(luò)流量。
6、如果秘鑰太短,他們可能很容易受到蠻力攻擊。
7、Kerberos需要所有客戶端和服務(wù)器保持時鐘同步。
3.RADIUS
RADIUS使用UDP 1812和1813傳輸信息,傳輸?shù)男畔H密碼被加密??赏ㄟ^使用TLS加強傳輸安全性,使用TCP端口2083,稱為RADIUS/TLS。
4.TACACS+
Cisco專有協(xié)議,可將AAA分別托管到不同服務(wù)器,通過TCP 49端口傳輸,可加密所有身份驗證信息。