溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

ASP.NET Core中IdentityServer4如何實(shí)現(xiàn)Token令牌身份認(rèn)證

發(fā)布時(shí)間:2021-09-18 16:11:25 來源:億速云 閱讀:392 作者:柒染 欄目:編程語言

這篇文章給大家介紹WebAPI中IdentityServer4如何實(shí)現(xiàn)Token令牌身份認(rèn)證,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

 開發(fā)提供數(shù)據(jù)的WebApi服務(wù),最重要的是數(shù)據(jù)的安全性。那么對(duì)于我們來說如何確保提供的API服務(wù)的數(shù)據(jù)安全將會(huì)是需要思考的問題。在ASP.NET WebApi中我們應(yīng)該如何保證我們的接口安全呢?  

在ASP.NET Core中使用的是目前最流行、功能最強(qiáng)大的身份授權(quán)以及訪問控制的解決方案——IdentityServer4(認(rèn)證和授權(quán)),它是一套專注于幫助使用.Net 技術(shù)的公司為現(xiàn)代應(yīng)用程序建立標(biāo)識(shí)和訪問控制解決方案,包括單點(diǎn)登錄、身份管理、授權(quán)和API安全。

二、什么是IdentityServer4

IdentityServer4 是一個(gè)免費(fèi)的開源 OpenID Connect 和 OAuth 2.0 身份認(rèn)證與授權(quán)框架,適用于 ASP.NET Core 平臺(tái),IdentityServer4 由 Dominick Baier 和 Brock Allen 兩位大神創(chuàng)建和維護(hù),您可以快捷的在應(yīng)用程序中集成基于令牌的身份驗(yàn)證,單點(diǎn)登錄和 API 訪問控制,支持非常多的協(xié)議實(shí)現(xiàn)和可擴(kuò)展點(diǎn),IdentityServer4 由 OpenID 基金會(huì)正式認(rèn)證,因此符合規(guī)范且可互操作,被微軟作為 .NET 基金會(huì)項(xiàng)目的一部分,并根據(jù)其行為準(zhǔn)則運(yùn)行。

IdentityServer4是用于ASP.NET Core的OpenID Connect和OAuth 2.0框架。 

將IdentityServer4部署到您的應(yīng)用中具備如下特點(diǎn):

1)、用戶認(rèn)證服務(wù)

  基于OpenID Connect實(shí)現(xiàn)的獨(dú)立的認(rèn)證服務(wù)實(shí)現(xiàn)對(duì)多平臺(tái)(web, native, mobile, services)的集中認(rèn)證

2)、API訪問授權(quán)

  為各種類型的客戶機(jī)頒發(fā)api訪問令牌,例如服務(wù)器到服務(wù)器、web應(yīng)用程序、spa和native/mobile程序

3)、聯(lián)合身份認(rèn)證

  支持外部身份提供者,如Azure Active Directory、Google、Facebook等

4)、定制化的實(shí)現(xiàn)

  IdentityServer4的許多方面可以定制以滿足您的需要,因?yàn)樗且粋€(gè)框架,而不是SaaS服務(wù),所以可以通過編寫代碼來調(diào)整實(shí)現(xiàn),以適應(yīng)不同的場(chǎng)景

5)、熟的開源方案

使用許可的Apache2開源協(xié)議,允許在其之上構(gòu)建商業(yè)產(chǎn)品,也作為.NET基金會(huì)支持的項(xiàng)目 (https://dotnetfoundation.org/projects?type=project&ps=10&pn=6)

6)、提供免費(fèi)的商業(yè)支持

  官方可以對(duì)使用者提供部分的免費(fèi)商業(yè)支持

OpenId Connect用于認(rèn)證(authentication),OAuth3.0用于授權(quán)(authorization)。

 IdentityServer4就是這樣一個(gè)框架,IdentityServer4是為ASP.NET CORE量身定制的實(shí)現(xiàn)了OpenId Connect和OAuth3.0協(xié)議的認(rèn)證授權(quán)中間件。

舉個(gè)例子來解釋認(rèn)證和授權(quán):
  你要登機(jī),你需要出示你的身份證和機(jī)票,身份證是為了證明你張三確實(shí)是你張三,這就是認(rèn)證( authentication );而機(jī)票是為了證明你張三確實(shí)買了票可以上飛機(jī),這就是授權(quán)( authorization )。


ASP.NET Core中IdentityServer4如何實(shí)現(xiàn)Token令牌身份認(rèn)證

ASP.NET Core WebAPI基于IdentityServer4實(shí)現(xiàn)Token令牌身份驗(yàn)證

三、ASP.NET Core WebAPI基于IdentityServer4實(shí)現(xiàn)Token令牌身份認(rèn)證原理講解

 IdentityServer4是一個(gè)框架,IdentityServer4是為ASP.NET CORE量身定制的實(shí)現(xiàn)了OpenId Connect和OAuth3.0協(xié)議的認(rèn)證授權(quán)中間件。 

OAuth3.0四種模式:

1、授權(quán)碼模式(authorization code)(支持refresh token—正宗的oauth3的授權(quán)模式)

2、簡(jiǎn)化模式(implicit)(不支持refresh token—為web瀏覽器應(yīng)用設(shè)計(jì))

3、密碼模式(resource owner password credentials)(支持refresh token為前后分離單頁(yè)應(yīng)用設(shè)計(jì))

4、客戶端模式(client credentials)(不支持refresh token—(為純后臺(tái)api服務(wù)消費(fèi)者設(shè)計(jì)))

這種模式直接根據(jù)client的id和密鑰即可獲取token,無需用戶參與這種模式比較合適消費(fèi)api的后端服務(wù),比如拉取一組用戶信息等不支持refresh token,主要是沒有必要。

接下來我們使用客戶端模式來實(shí)現(xiàn)一個(gè)IdentityServer4授權(quán)。

1、客戶端直接用自身的信息向授權(quán)服務(wù)器請(qǐng)求token。

2、授權(quán)服務(wù)器驗(yàn)證信息后返回token。

其實(shí)IdentityServer4  還提供了我們自己去實(shí)現(xiàn)自定義授權(quán)模式!

ASP.NET Core中IdentityServer4如何實(shí)現(xiàn)Token令牌身份認(rèn)證

ASP.NET Core WebAPI基于IdentityServer4實(shí)現(xiàn)Token令牌身份認(rèn)證

四、ASP.NET Core基于IdentityServer4【客戶端模式】實(shí)現(xiàn)Token令牌身份認(rèn)證

適合場(chǎng)景:Web API與Web API通信

客戶端憑證模式,是最簡(jiǎn)單的授權(quán)模式,因?yàn)槭跈?quán)的流程僅發(fā)生在Client與Identity Server之間。

該模式的適用場(chǎng)景為服務(wù)器與服務(wù)器之間的通信。比如對(duì)于一個(gè)電子商務(wù)網(wǎng)站,將訂單和物流系統(tǒng)分拆為兩個(gè)服務(wù)分別部署。訂單系統(tǒng)需要訪問物流系統(tǒng)進(jìn)行物流信息的跟蹤,物流系統(tǒng)需要訪問訂單系統(tǒng)的快遞單號(hào)信息進(jìn)行物流信息的定時(shí)刷新。而這兩個(gè)系統(tǒng)之間服務(wù)的授權(quán)就可以通過這種模式來實(shí)現(xiàn)。

ASP.NET Core中IdentityServer4如何實(shí)現(xiàn)Token令牌身份認(rèn)證

客戶端模式(client credentials)

五、ASP.NET Core基于IdentityServer4【密碼模式】實(shí)現(xiàn)Token令牌身份認(rèn)證

適合場(chǎng)景:Web應(yīng)用程序與Web API通信!

Resource Owner其實(shí)就是User,所以可以直譯為用戶名密碼模式。密碼模式相較于客戶端憑證模式,多了一個(gè)參與者,就是User。通過User的用戶名和密碼向Identity Server申請(qǐng)?jiān)L問令牌。

ASP.NET Core中IdentityServer4如何實(shí)現(xiàn)Token令牌身份認(rèn)證

密碼模式(resource owner password credentials)

六、思考與總結(jié)

1)、思考
請(qǐng)問 ids4 的客戶端授權(quán)模式怎么去獲取 refresh_token 呢?客戶端授權(quán)不支持refresh_token!

Refresh tokens are supported for the following flows: authorization code, hybrid and resource owner password credential flow. The clients needs to be explicitly authorized to request refresh tokens by setting AllowOfflineAccess to true.

好像不支持刷新令牌,等token快過期時(shí),你自己重新獲取一個(gè)就可以了。

解決辦法:

1、建議將token的過期時(shí)間設(shè)置長(zhǎng)點(diǎn)或者需要與調(diào)用方約定好,需要定期來重新獲取新的token。

2、Identityserver4中ResourceOwnerPassword 密碼模式支持refresh_token。

2)、總結(jié)

密碼模式(resource owner password credentials)(支持refresh token為前后分離單頁(yè)應(yīng)用設(shè)計(jì))
客戶端模式(client credentials)(不支持refresh token—(為純后臺(tái)api服務(wù)消費(fèi)者設(shè)計(jì)))

也可以多種混合模式一起使用,具體查看IdentityServer4.Models.GrantTypes


關(guān)于WebAPI中IdentityServer4如何實(shí)現(xiàn)Token令牌身份認(rèn)證就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI