AspNetCore認(rèn)證授權(quán)代碼怎么寫

本篇文章給大家分享的是有關(guān)AspNetCore認(rèn)證授權(quán)代碼怎么寫,小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

創(chuàng)新互聯(lián)專注于惠民網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠為您提供惠民營銷型網(wǎng)站建設(shè),惠民網(wǎng)站制作、惠民網(wǎng)頁設(shè)計、惠民網(wǎng)站官網(wǎng)定制、小程序設(shè)計服務(wù),打造惠民網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供惠民網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。

在普通的MVC項(xiàng)目中 我們普遍的使用Cookie來作為認(rèn)證授權(quán)方式,使用簡單。登錄成功后將用戶信息寫入Cookie;但當(dāng)我們做WebApi的時候顯然Cookie這種方式就有點(diǎn)不適用了。

在dotnet core 中 WebApi中目前比較流行的認(rèn)證授權(quán)方式是Jwt  (Json Web Token) 技術(shù)。Jwt 是一種無狀態(tài)的分布式身份驗(yàn)證方式,Jwt 是將用戶登錄信息加密后存放到返回的Token中 ,相當(dāng)于用戶信息是存儲在客戶端。Jwt的加密方式有兩種 :對稱加密與非對稱加密,非對稱加密即 RSA 加密的方式。

自己手寫認(rèn)證授權(quán)代碼和Jwt的思路是一樣的;不同之處在于:

1、加密方式僅僅是采用的對稱加密方式 簡單高效。哈哈!(弊端就是沒有非對稱加密更安全);

2、用戶登錄信息主要保存在redis中,即服務(wù)端。

自己寫的好處:

1、擴(kuò)展性強(qiáng),可根據(jù)自己的需要進(jìn)行各種擴(kuò)展,比如在驗(yàn)證授權(quán)時可很方便的添加多設(shè)備登錄擠下線功能等。

2、可隨時調(diào)整用戶的Token失效時間。

認(rèn)證及授權(quán)流程

1、先請求登錄接口,登錄成功,為用戶產(chǎn)生一個Token,

登錄獲取Token 圖片中ticket字段。

AspNetCore認(rèn)證授權(quán)代碼怎么寫

2、 客戶端拿到Token在其他請求中將Token信息添加到請求頭中傳遞到服務(wù)端。

開發(fā)思路

1、添加一個過濾器。在Startup 中ConfigureServices方法里添加一個Filters 即我們自己授權(quán)代碼類。

AspNetCore認(rèn)證授權(quán)代碼怎么寫

添加過濾器之后我們的每次請求都會優(yōu)先執(zhí)行過濾器的代碼。在這里我們就可以判斷用戶是否已經(jīng)登錄,從而進(jìn)行攔截沒有授權(quán)的的請求。

AspNetCore認(rèn)證授權(quán)代碼怎么寫

2、登錄并獲取Token

由于添加了IAuthorizationFilter類型的過濾器,所以每個請求都會被攔截。所以登錄接口我們需要允許匿名訪問。

AspNetCore認(rèn)證授權(quán)代碼怎么寫

3、加解密Token

加密:登錄成功后就要產(chǎn)生個Token了,產(chǎn)生也簡單。將用戶的唯一信息比如uid或者guid進(jìn)行對稱式加密。當(dāng)然如果需要對登錄設(shè)備做區(qū)分或者多設(shè)備登錄擠下線功能時最好也將登錄設(shè)備一起加密進(jìn)去。

我們都知道 在加密中一般情況下只要加密的數(shù)據(jù)及加密key不變;那么加密后的內(nèi)容也會一直保持不變。如果我們每次登錄產(chǎn)生的Token一直沒有任何變化只要這個Token被泄露了那將很危險的。竟然我們希望每次登錄產(chǎn)生的Token都有變化。那就要改變加密數(shù)據(jù)或者加密key了。加密數(shù)據(jù)是用戶唯一信息這個顯然不可能產(chǎn)生變化。所以我們能改變的地方只能是加密key了;我們采用固定key+隨機(jī)key的方式。

因?yàn)榧用躪ey在我們解密時也是需要一一對應(yīng)的。所以我們得想辦法將我們的隨機(jī)key告訴我們解密的代碼中。辦法就是 我們將加密后的內(nèi)容(一般情況進(jìn)行base64編碼)再加上隨機(jī)key。(隨機(jī)key一定是固定長度 不然后面無法解析拆分)

比如加密內(nèi)容是guid=73e01eab-210d-4d19-a72a-d0d64e053ec0+client=ios  固定key=123654+隨機(jī)key=FEZaaWbyimaWiJHah 

即加密過程:

加密(73e01eab-210d-4d19-a72a-d0d64e053ec0&ios,123654FEZaaWbyimaWiJHah)=M0EzM0ZGRjk2QzgwRDY2RDJDMTdFOEJGRUE0NDI3NEE1RDlFNkU4NDQ0MERFNEIyMkQ5QjM4MjAxODcwj加隨機(jī)keyFEZaaWbyimaWiJHah

所以我們返回給用戶的Token實(shí)際上是包含了隨機(jī)key的。當(dāng)然這個隨機(jī)key只有我們自己知道。因?yàn)殡S機(jī)key的長度以及位置只有我們自己知道。這種方式即使我們固定key被泄露了 只要別人不知道我們隨機(jī)key處理方法也無濟(jì)于事。

解密:知道加密過程后就好解密了。拿到用戶提交的Token后首先按照隨機(jī)key的固定位置進(jìn)行截取。將加密內(nèi)容和隨機(jī)key拆開。然后將固定key和隨機(jī)key組合一起解密加密的內(nèi)容,取得用戶guid和登錄的客戶端類型。

完整加解密代碼

代碼中的ticket代表本文中的Token。代碼中使用的是DES加解密

AspNetCore認(rèn)證授權(quán)代碼怎么寫

以上就是AspNetCore認(rèn)證授權(quán)代碼怎么寫,小編相信有部分知識點(diǎn)可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

文章標(biāo)題:AspNetCore認(rèn)證授權(quán)代碼怎么寫
標(biāo)題來源:http://muchs.cn/article10/pdgdgo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序域名注冊、軟件開發(fā)、App開發(fā)靜態(tài)網(wǎng)站、網(wǎng)站設(shè)計

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營