.Net Core Web Api_筆記31_IdentityServer4_淺談OAuth2.0,OpenID與OpenID Connect

 

在 WebAPI 中,由於使用的是 HTTP 協定做傳輸,具有無狀態性,
只通過一個 U RL 地址即可獲取想要的資源,輕量級,
可供任意客戶端調用,靈活性強。

所以, We bAPI 是非常受開發者喜歡的,可連接任意處的客戶端,不受限制,用途很廣。

由於客戶端的多樣性,使用傳統的基於 session 和 cookies 
已無法滿足身份驗證和授權,此時,基於 JWT 的身份驗證和授權就出現了。 


JWT只需要在認證伺服器上拿到一個 Token ,這個 Token 包含了用戶身份的宣告(claims),可以用於授權某個用戶。 

Identityserver4 是基於 OpenID Connect 和 OAuth2.0的 JWT 身份驗證和授權框架。 
Identityserver4 目前最新版本是 v4.x ,是專門為 ASPNET Core 研發出來一套身份驗證和授權框架,目前可以在 ASPNET Core 3 . x 以上版做開發使用。


認證與授權


認證(Authentication):你是誰

授權(Authorization):你可以做捨麼



OAuth

OAuth 是一個關於授權的開放網絡協定,目前市面上常使用的是2.0版本,並與1.0版不兼容。

OAuth2.0主要是用來向第三方應用頒發token令牌的,是基於 JWT 的授權解決方案,所頒發的令牌包含用戶和授權信息.並決定這個令牌可以訪問資源伺服器上的哪些資源。也就是在資源伺服器和客戶端之間加一個授權伺服器,負責用戶的授權。



OAuth2.0 的授權流程如下:
1.先將用戶和客戶端在授權伺服器上進行備案
2.用戶通過手機、瀏覽器等訪問客戶端
3.客戶端攜帶用戶和客戶端言息向授權伺服器請求令牌
4.授權伺服器驗證合法後,頒發令牌給客戶端,頒發的令牌具有用戶可訪問哪些資源的權限。
5.客戶端拿到令牌之後,攜帶令牌發送給資源伺服器(或稱為第三方應用)。
6.在資源伺服器上確認令牌沒問題,則向客戶端開放用戶有權限訪問的指定資源

OpenID
OpenID是一個去中心化的網上身份認證協議,主要用於用戶身份的驗證,是基於 URI 進行身份驗證的.傳統的身份驗證是基於用戶名和密碼的,如果需要訪問 10 個網站,則在這 10 個網站上都要註冊,一共需要註冊 10 次。而如果是基於 OpenID的認證,只需要在一個網站上註冊,然後在剩下的 9 個網站上使用第一個網站上註冊的用戶信息登入即可。
最典型的例子,就是我們在登入某個網站時,會有其他登入方式。


以上圖為例,在二維碼的下面有QQ 登入”和”手機登入“。當點擊“ QQ 登入“或”手機登入”時,就會轉到對應網站的 OpenID認翻及務器上進行認證,認證通過之後,再返回到登入的網站,並且已經登入成功。OpenID的功能提煉出來就是二”一處註冊,到處通行” 。

OpenID給所有支持OpenID 的網站提供了共享用戶資源的功能,用戶可以清楚的控制哪些資訊可以被共享,例如姓名、地址、電話號碼等。


OpenID Connect

OpenID Connect是OpenID與OAuth2.0的結合,完美的解決身份認證和身份授權的問題。
Identityserver4 就是基於OpenID與OAuth2.0來實現的身份驗證和授權的。

有時候,我們並不需要OpenID,只需要 OAuth2 . 0 ,例如機器與機器之間的訪問,就可以採用 OAuth2.0,只存在授權,不存在認證。
因此,我們可以將Identityserver4 構建的伺服器稱為認證授權伺服器,既有認證也有授權。


留言

這個網誌中的熱門文章

何謂淨重(Net Weight)、皮重(Tare Weight)與毛重(Gross Weight)

Architecture(架構) 和 Framework(框架) 有何不同?_軟體設計前的事前規劃的藍圖概念

經得起原始碼資安弱點掃描的程式設計習慣培養(五)_Missing HSTS Header