微服務(wù)實(shí)踐目錄,可以參見連接。
背景
上一篇文章中整體介紹了用戶管理會涉及到的方面,本篇文章主要介紹用戶認(rèn)證相關(guān)的方案與技術(shù)?;貧w之前的用詞方式,針對認(rèn)證實(shí)體的認(rèn)證可以分為兩類:認(rèn)證實(shí)體軟件認(rèn)證和認(rèn)證實(shí)體綁定硬件認(rèn)證。
現(xiàn)在很多IoT方面的認(rèn)證方式都是使用認(rèn)證實(shí)體綁定硬件認(rèn)證的方法進(jìn)行認(rèn)證的。還有很多硬件認(rèn)證的方式基本上也是以這種方式進(jìn)行認(rèn)證的,如通信中的Wifi的Mac地址認(rèn)證,4GLTE的IMSI認(rèn)證。4GLTE協(xié)議中的終端認(rèn)證使用通信模塊的認(rèn)證進(jìn)行終端的認(rèn)證過程。與IoT的方式都是使用對附屬硬件的認(rèn)證達(dá)成對整個認(rèn)證實(shí)體的認(rèn)證過程。

認(rèn)證實(shí)體綁定硬件認(rèn)證的方式還在其他很多方面用到,比如說銀行辦理網(wǎng)銀時發(fā)放的硬件KEY。具體的交互方式如下圖所示:

具體的技術(shù)可以參考身份認(rèn)證技術(shù)和認(rèn)證技術(shù)。本片文章不關(guān)注這種方式的認(rèn)證,所以就不進(jìn)行過多的說明。下面我們說明認(rèn)證實(shí)體軟件認(rèn)證相關(guān)內(nèi)容。
認(rèn)證方向
在上篇文章中已經(jīng)將用戶擴(kuò)展到認(rèn)證實(shí)體,并說明了所有的認(rèn)證過程都可以認(rèn)為是對認(rèn)證實(shí)體的認(rèn)證過程。在進(jìn)行深入的考慮,認(rèn)證一般是存在雙方或者三方的。雙方是認(rèn)證實(shí)體和認(rèn)證服務(wù),三方是認(rèn)證實(shí)體、認(rèn)證服務(wù)和業(yè)務(wù)服務(wù)。一般認(rèn)為認(rèn)證過程是對客戶端的身份認(rèn)證,但在有些情況下是對服務(wù)端的認(rèn)證。還有一些情況下是需要進(jìn)行雙向認(rèn)證的。
關(guān)于對服務(wù)端認(rèn)證方面可以舉一個例子:在一些情況下用戶對某個網(wǎng)絡(luò)服務(wù)是信賴的,在使用P2P服務(wù)的區(qū)塊鏈技術(shù)中需要一種對節(jié)點(diǎn)認(rèn)證的方式。對于節(jié)點(diǎn)發(fā)送的消息的有效性進(jìn)行判斷的過程也可以理解為對服務(wù)端的認(rèn)證過程。對于DNS網(wǎng)絡(luò)中DNS解析信息傳遞的過程,其實(shí)也可以建立這樣的過程。以防止域名污染情況的發(fā)生。
對于使用對客戶端認(rèn)證的方式進(jìn)行認(rèn)證是一種非常通用的模式。雙方認(rèn)證的情況最常見的例子是HTTPS的雙向認(rèn)證機(jī)制。認(rèn)證最終的目的都是為了鑒別對方的身份,在確認(rèn)對方身份后既可以進(jìn)行信任通信。
認(rèn)證與數(shù)據(jù)交換方式
數(shù)據(jù)交換是指用戶認(rèn)證數(shù)據(jù)怎樣從客戶端傳送到服務(wù)端,服務(wù)端的驗(yàn)證數(shù)據(jù)怎樣傳輸給客戶端。在這個過程中為了免受中間人攻擊,認(rèn)證過程中的通信管理非常重要。不同層面的解決方案都可以解決這個問題。例如:http通信層面為認(rèn)證提供了多種認(rèn)證信息傳遞的方式Basic, Digest and NTLM,在傳輸層提供了ssl,tls這些通信加密技術(shù)。
認(rèn)證信息傳遞過程中盡量不要明文的進(jìn)行認(rèn)證信息傳遞,盡量通過加密算法進(jìn)行認(rèn)證信息傳遞。盡量使用加密通信進(jìn)行認(rèn)證過程通信。
認(rèn)證方法
統(tǒng)一認(rèn)證(SSO)
通過統(tǒng)一的認(rèn)證中心認(rèn)證用戶。通常在企業(yè)內(nèi)部建立一個統(tǒng)一的用戶管理與認(rèn)證中心,由認(rèn)證中心負(fù)責(zé)用戶的認(rèn)證。方便企業(yè)內(nèi)部統(tǒng)一管理用戶。第三方認(rèn)證(OAuth,OpenID)
第三方保存用戶認(rèn)證方式,以及用戶數(shù)據(jù)。通過互聯(lián)網(wǎng)上的用戶信息達(dá)到快速登錄,降低復(fù)雜度的方法吸引客戶使用系統(tǒng)。OpenAPI
在互聯(lián)網(wǎng)上免不了和其他的公司有合作有交互。OpenAPI是在互聯(lián)網(wǎng)上程序間的認(rèn)證方式。
認(rèn)證流程
認(rèn)證信息生命周期:認(rèn)證->認(rèn)證信息保持->認(rèn)證信息過期。認(rèn)證信息保持會在Session一節(jié)中說明
https CA證書,OpenAPI的key和secret都是認(rèn)證。
認(rèn)證技術(shù)框架
直接認(rèn)證方式
在使用、管理、存儲用戶信息的地方,直接進(jìn)行認(rèn)證。中間認(rèn)證方式
使用用戶信息的地方和管理用戶信息的地方,是兩個地方。第三方認(rèn)證方式。
使用第三方的用戶數(shù)據(jù)(通過數(shù)據(jù)訪問接口的方式)獲取用戶數(shù)據(jù)。
技術(shù)
sso、openapi
Apereo CAS,Spring Cloud Security,JBoss 開源的 Keycloak 等(.NET IdentityServer4 )。
2017.2.16 開濤shiro教程-第十七章-OAuth2集成(一)服務(wù)器端
2017.2.16 開濤shiro教程-第十七章-OAuth2集成(二)客戶端
總結(jié)
認(rèn)清認(rèn)證過程中需要了解:認(rèn)證方向、認(rèn)證數(shù)據(jù)交換、認(rèn)證方法、認(rèn)證流程。才可以完整的理解認(rèn)證過程。本文主要說明認(rèn)證的過程,下一篇文章會針對認(rèn)證過程中的技術(shù)進(jìn)行比較和說明。
參考
- 概述
HttpClient三種不同的認(rèn)證方案: Basic, Digest and NTLM
認(rèn)證與授權(quán)——單點(diǎn)登錄協(xié)議盤點(diǎn):OpenID vs OAuth2 vs SAML
HTTP API 認(rèn)證授權(quán)術(shù)
深入理解跨域SSO單點(diǎn)登錄原理與技術(shù)