.NET Core WebAPI集成JWT,實(shí)現(xiàn)身份驗(yàn)證

前兩篇文章給大家介紹了在.NET Core中如何使用Swagger的文章,那今天給大家分享一下JWT

在做接口開發(fā)的同學(xué)可能都有感受,我的接口如何保護(hù)的問題,如果沒有身份驗(yàn)證,那不是接口完全暴露在外面,任意使人調(diào)用,這顯然不是我們想要的一種結(jié)果。當(dāng)然做身份驗(yàn)證的方式有多種,今天給大家講一種比較流行了,標(biāo)準(zhǔn)的身份驗(yàn)證JWT

什么是JWT?

隨著技術(shù)的發(fā)展,分布式web應(yīng)用的普及,通過session管理用戶登錄狀態(tài)成本越來越高,因此慢慢發(fā)展成為token的方式做登錄身份校驗(yàn),然后通過token去取redis中的緩存的用戶信息,隨著之后jwt的出現(xiàn),校驗(yàn)方式更加簡(jiǎn)單便捷化,無需通過redis緩存,而是直接根據(jù)token取出保存的用戶信息,以及對(duì)token可用性校驗(yàn),單點(diǎn)登錄更為簡(jiǎn)單。

JWT的結(jié)構(gòu)體是什么樣的?

JWT由三部分組成,分別是頭信息、有效載荷、簽名,中間以(.)分隔

(1)header(頭信息)

由兩部分組成,令牌類型(即:JWT)、散列算法(HMAC、RSASSA、RSASSA-PSS等)

(2)Payload(有效載荷)

JWT的第二部分是payload,其中包含claims。claims是關(guān)于實(shí)體(常用的是用戶信息)和其他數(shù)據(jù)的聲明,claims有三種類型: registered, public, and private claims。

Registered claims: 這些是一組預(yù)定義的claims,非強(qiáng)制性的,但是推薦使用, iss(發(fā)行人), exp(到期時(shí)間), sub(主題), aud(觀眾)等;

Public claims: 自定義claims,注意不要和JWT注冊(cè)表中屬性沖突

Private claims: 這些是自定義的claims,用于在同意使用這些claims的各方之間共享信息,它們既不是Registered claims,也不是Public claims。

(3)Signature

要?jiǎng)?chuàng)建簽名部分,必須采用編碼的Header,編碼的Payload,秘鑰,Header中指定的算法,并對(duì)其進(jìn)行簽名。

JWT使用流程:

JWT在.NET Core項(xiàng)目中的具體用法:

(1)在ConfigureServices方法中添加JWT相關(guān)代碼:

(2)在Configure方法中添加JWT代碼:

(3)創(chuàng)建一個(gè)JWT服務(wù)類:

(4)在接口類或方法上標(biāo)記身份驗(yàn)證:

到此為止,JWT的基本用法就結(jié)束,非常簡(jiǎn)單和方便,接下來我們用postman測(cè)試一下JWT是否生效:

(1)當(dāng)我們?cè)诓坏卿浀那闆r下,訪問接口看看是什么現(xiàn)象:

我們發(fā)現(xiàn)接口返回提示:401 Unauthorized

(2)我們先調(diào)用登錄接口,先計(jì)算得到token,然后再來請(qǐng)求試試:

登錄成功后,接口返回了token值

(3)將token復(fù)制粘貼到下方,請(qǐng)求業(yè)務(wù)接口,成功調(diào)用:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容