溫馨提示×

溫馨提示×

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

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

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

發(fā)布時間:2022-01-05 15:03:44 來源:億速云 閱讀:138 作者:柒染 欄目:大數(shù)據(jù)

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

在普通的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)注億速云行業(yè)資訊頻道。

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

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

AI