一.概述
在物理層之間相互通信必須保護(hù)資源,需要實(shí)現(xiàn)身份驗(yàn)證和授權(quán)厂镇,通常針對(duì)同一個(gè)用戶存儲(chǔ)纤壁。對(duì)于資源安全設(shè)計(jì)包括二個(gè)部分,一個(gè)是認(rèn)證捺信,一個(gè)是API訪問酌媒。
1 認(rèn)證
認(rèn)證是指:應(yīng)用程序需要知道當(dāng)前用戶的身份時(shí)欠痴,需要進(jìn)行身份驗(yàn)證,確定用戶是否有效秒咨。最常見的身份驗(yàn)證協(xié)議是SAML2p喇辽,WS-Federation、OpenID Connect雨席。SAML2p是最受歡迎和最廣泛部署的菩咨。OpenID Connect是三者中的最新產(chǎn)品,被認(rèn)為有最大潛力。
2 API訪問
對(duì)API訪問是:用戶對(duì)資源的訪問陡厘,以api的形式來訪問資源抽米,涉及到資源授權(quán)。
3 OAuth2 介紹
OAuth2是一種協(xié)議糙置,全稱(Open Authorization)云茸,是為用戶資源的授權(quán)提供了一個(gè)安全的、開放而又簡(jiǎn)易的標(biāo)準(zhǔn)谤饭”贽啵互聯(lián)網(wǎng)很多服務(wù)如Open API都提供了OAUTH認(rèn)證服務(wù)。為桌面程序网持、手機(jī)端或web應(yīng)用提供了一種簡(jiǎn)單的宜岛,標(biāo)準(zhǔn)的方式去訪問需要用戶授權(quán)的API服務(wù)。OAuth2協(xié)議特定:
(1)簡(jiǎn)單:不管是OAUTH服務(wù)提供者還是應(yīng)用開發(fā)者功舀,都很易于理解與使用萍倡。
(2)安全:沒有涉及到用戶密鑰等信息,更安全更靈活辟汰。
(3)開放:任何服務(wù)提供商都可以實(shí)現(xiàn)OAUTH列敲,任何軟件開發(fā)商都可以使用OAUTH。
4 OIDC介紹
OIDC是指OpenID Connect帖汞,是基于OAuth 2.0規(guī)范的可互操作的身份驗(yàn)證協(xié)議戴而。是用 API 進(jìn)行身份交互的框架。它使用簡(jiǎn)單的REST / JSON消息流來實(shí)現(xiàn)翩蘸。OIDC實(shí)現(xiàn)了用戶驗(yàn)證跨越物理層所意,無需管理密碼文件(密鑰)。
OpenID是Authentication催首,即認(rèn)證扶踊。對(duì)用戶的身份進(jìn)行認(rèn)證,判斷其身份是否有效郎任。
OAuth是Authorization秧耗,即授權(quán)。 對(duì)用戶允許訪問哪些資源的授權(quán)舶治。 授權(quán)要在認(rèn)證之后進(jìn)行分井,只有確定用戶身份才能授權(quán)车猬。
OpenID Connect是“認(rèn)證”和“授權(quán)”的結(jié)合。是對(duì)OAuth 2.0之上的擴(kuò)展尺锚。這樣對(duì)于兩個(gè)基本的安全問題珠闰,即身份驗(yàn)證和API訪問,被合并為一個(gè)協(xié)議缩麸,通常只需一次往返安全令牌服務(wù)苍日。
5 IdentityServer4 介紹
IdentityServer4 是適用于ASP.NET Core缚够,集成了OpenID Connect和OAuth 2.0的框架肋演。在現(xiàn)實(shí)開發(fā)中域醇,項(xiàng)目涉及到多種物理層架構(gòu),它們是多進(jìn)程的方式部署到不同的服務(wù)器上弧械。比如Web八酒、移動(dòng)、桌面刃唐、服務(wù)等物理層架構(gòu)羞迷。也有可能是第三方的程序。 這些物理層之間的通信需要涉及到授權(quán)和身份認(rèn)證画饥。最常見的互動(dòng)包括:
(1) 瀏覽器與Web應(yīng)用程序通信衔瓮。
(2) Web應(yīng)用程序與Web API進(jìn)行通信(可能都是自己的,也有可能是第三方提供)抖甘。
(3) 服務(wù)器的應(yīng)用程序與Web API通信(比如windows服務(wù)與Web API)热鞍。
(4) Web API與Web API進(jìn)行通信(可能都是自己的,也有可能是第三方提供)衔彻。
在沒有使用安全令牌服務(wù)時(shí)薇宠,多物理層之間通信,看起來像下面這樣:
加了IdentityServer4重構(gòu)應(yīng)用程序后艰额,使用了安全令牌服務(wù)澄港,產(chǎn)生的體系結(jié)構(gòu)和協(xié)議如下所示:
6 IdentityServer功能包括:
(1)保護(hù)你的資源(資源可以理解包括權(quán)限,比如是否有增柄沮、刪回梧、改、查的權(quán)限)
(2)使用本地帳戶存儲(chǔ)或外部身份提供程序?qū)τ脩暨M(jìn)行身份驗(yàn)證
(3)提供會(huì)話管理和單點(diǎn)登錄
(4)管理和驗(yàn)證客戶端
(5)向客戶發(fā)放身份和訪問令牌
(5)驗(yàn)證令牌
7 名詞術(shù)語
- 用戶是指:通過注冊(cè)成功后祖搓, 登錄來訪問資源的人狱意。比如:會(huì)員,系統(tǒng)管理員等棕硫。
- 客戶端是指:向IdentityServer請(qǐng)求令牌的程序髓涯,用于驗(yàn)證用戶(請(qǐng)求身份令牌)或訪問資源(請(qǐng)求訪問令牌)袒啼。如Web應(yīng)用程序哈扮,本機(jī)移動(dòng)或桌面應(yīng)用程序纬纪,SPA,服務(wù)器進(jìn)程等滑肉。
- 資源:使用IdentityServer保護(hù)資源包各,比如用戶的身份數(shù)據(jù)或API。身份數(shù)據(jù)是關(guān)于用戶的信息也稱Claim聲明, 例如姓名或電子郵件地址靶庙。API表示客戶端要調(diào)用的功能如Web API问畅。
- 身份令牌:是指身份驗(yàn)證過程,確實(shí)用戶是否有效六荒。即Authentication認(rèn)證护姆。
- 訪問令牌:是指允許訪問API資源。即Authorization授權(quán)掏击。
8 nuget包安裝
安裝版本網(wǎng)址:https://www.nuget.org/packages/IdentityServer4/3.0.0-preview3.4
安裝:Install-Package IdentityServer4
9 關(guān)于IdentityServer4的一些開源示例
https://identityserver4.readthedocs.io/en/latest/intro/packaging.html
下面是關(guān)于IdentityServer的源碼和示例卵皂,其中IdentityServer4.Samples中有大量示例,學(xué)習(xí)從這里開始砚亭。
https://github.com/IdentityServer/
10 學(xué)習(xí)IdentityServer步驟
(1) 將IdentityServer添加到ASP.NET Core應(yīng)用程序
(2) 配置IdentityServer
(3) 為各種客戶發(fā)放令牌
(4) 保護(hù)Web應(yīng)用程序和API
(5) 添加對(duì)基于EntityFramework的配置的支持
(6) 添加對(duì)ASP.NET身份的支持
(7) 添加AdminUI社區(qū)版以管理用戶和配置
參考文獻(xiàn)