日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【朝夕技术专刊】Core3.1WebApi_Filter-Authorize详解

發布時間:2023/12/4 编程问答 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【朝夕技术专刊】Core3.1WebApi_Filter-Authorize详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

歡迎大家閱讀《朝夕Net社區技術專刊》第6期

我們致力于.NetCore的推廣和落地,為更好的幫助大家學習,方便分享干貨,特創此刊!很高興你能成為忠實讀者,文末福利不要錯過哦!

前言:

本部分文檔將詳細給大家介紹CoreWebApi的Authorize鑒權授權;為什么要鑒權授權呢?如果沒有啟用身份認證,那么任何匿名用戶只要知道了我們服務的url,就能隨意訪問我們的服務接口,從而訪問或修改數據庫。所以在各種系統開發中授權是必備的;今天這里就給大家說說授權的事兒。

01

PART

傳統方式的授權

請看下圖,在傳統授權中,因為Http請求是沒有狀態的,http請求第一次請求和第二次請求是沒有關系的,所有在傳統的授權方式里面使用的是Session+Cookes;Session使用的較多;思路:客戶端(瀏覽器)第一次請求服務器的時候,服務器針對于當前這個瀏覽器生成一個Session:Key-value形式,SessionId:Session值;客戶端來登錄獲取權限的時候,服務器然后在響應請求的時候,把SessionId返回給客戶端瀏覽器;瀏覽器把SessionId保存在cookies中,再次去請求服務器的時候帶上這個SessionId的標識,然后服務器就可以識別到,這是上次某某某瀏覽器來訪問過我,登陸過,這個SessionId是我服務器頒發的,就通過了權限認證了。

基于Session cookies的權限校驗是比較傳統的,也是最常見的,不過基于Session、Cookies的權限校驗,存在一些尷尬事兒。

因為Session是存儲在服務器的,在一些大型分布集群服務器中,Session共享的問題不太好解決(當然這里不是說不能解決),比方說有A/B/C/D四個服務器集群,那么登錄時候如果是A服務器生成的Session,那么B服務器是不能用的;需要做Session共享,成本相對來說較高;

像大家在使用一些系統的時候,常常會見到一些像QQ、微信、淘寶賬號 這類第三方賬號登錄,如果使用Cookies和Session來實現,成本很高;

02

PART

基于令牌的鑒權授權——Basic授權

在Asp.NetWebApi中可以使用Basic授權;Basic授權是基于令牌的,在登錄的時候,服務器給頒發一個tiket(這里可以理解成一個鑰匙),然后你去訪問Api的時候,把這個tiket給帶上,就可以通過校驗;Basic認證實現起來非常簡單;下面我把代碼貼在這里供大家參考。

圖1

注:就是在用戶登錄的時候通過在請求登錄的時候傳遞的參數生成一個Tiket;使用PostMan調用如圖2所示;

圖2

那么有tiket了,在調用Api的時候,就需要驗證這個tiket了,怎么驗證呢?Richard老師這里是使用Asp.NetMVC中的Filter---AuthorizeAttribute來實現的。

圖3

定義個Api:GetUserInfo.

在沒有標記任何Filter的時候,通過Ajax請求Api;結果可以正常拿到,請看圖4、圖5


圖4

圖5

那標記特性以后呢?請看圖6;圖7


圖6

圖7

請求結果拿不到,因為在請求WebApi的時候沒有把tiket帶上。請看圖8、圖9、圖10;

圖8

圖9


圖10

現在可以正常調用Api獲取到數據;那么Basic的流程如下:

1.????獲取tiket;

2.????在調用Api的時候,把tiket帶上;通過驗證tiket的來達到授權的效果;

03

PART

基于令牌的鑒權授權——Jwt鑒權授權

Jwt鑒權:Json Web Token是在.NetCore中最主流的鑒權授權方式,這里Richard老師準備給大家詳細解讀Jwt鑒權授權的核心思路;請看圖1

圖1

圖1為jwt鑒權授權的架構圖,圖1中分別有四個角色,客戶端-User,鑒權中心AuthorziationServer,資源提供-Api, ?第三方Api-Third-Party。

根據圖中的流程:

  • ?請求鑒權中心AuthorziationServer(根據賬號密碼到鑒權中心登錄),獲取Token

  • 去請求資源Api 或者第三方Api Third-Party 的時候帶上token,就可以獲取數據;

  • 小伙伴兒在看到這個圖以后,可能會覺得奇怪,資源Api并沒有和鑒權中心AuthorizatinServer發生交互,是怎么驗證權限的呢?這其實是Jwt鑒權的一大特點;

    那是怎么鑒權的呢?下面就給大家解惑一下:

    其實鑒權中心在生成Token, ?Api在通過Token驗證權限的時候,這二者或有一個非對稱可逆加密解密的過程;

    1.????鑒權中心兜兒里有一個私鑰,用來加密;私鑰是私密的,只有鑒權中心知道;

    2.????資源Api或者第三方Api Thrid-Party兜兒里有一個和鑒權中的那個私鑰對應的解密公鑰,就是鑒權中心私鑰加密,資源Api,公鑰解密;公鑰是公開的;誰都是知道的;

    【這里涉及到有非對稱加密解密的知識,如果對這一塊的內容不是很理解的,可以聯系QQ: 1432568536獲取關于加密解密的內容】

    ?

    那么鑒權中心和資源Api之間是怎么完成的呢?

  • ?在鑒權中心,登錄以后,生成的Token是通過私鑰加密的,這里就只有公鑰能解開。

  • ?在請求Api的時候,資源Api有公鑰,那么資源Api就去嘗試解密,如果能解開,說明這個Token確實是來自于鑒權中心,那OK,那資源Api就通過校驗,正常返回數據;否則就表示沒有權限。

  • 下面給大家介紹一下這個Token的內容結構:如圖2,是一段標準的Token內容;一共分為三段。?

    圖2

    第一段:頭信息,紅色部分,圖3所示,表示加密算法:HS256,類型是jwt鑒權;

    圖3

    第二段:圖4所示:紫色部分,表示有效載荷,也就是在這個Token里面可以攜帶一些信息,有Token標準的信息內容,也可以自定義加一些內容。

    圖4

    第三段:簽名

    簽名Signature 

    =HMACSHA256( base64UrlEncode(頭信息) + "." +? base64UrlEncode(有效載荷信息),? 公鑰)

    通過HMACSHA256 算法加密 +.+ ?Base64位的頭信息+.+Base64位的有效載荷信息+.+公鑰;三段內容通過點連接起來形成一個完整的Token 令牌。

    那Token里的內容能修改嗎?不能修改,如果修改過了,內容解密后,跟真實內容就不一樣了;下面就基于Jwt在Core環境下做一個實現。

    如果圖1中所示,得有一個鑒權中心專門用來頒發Token;

    圖5

    這里使用到了一個JwtService: 如圖6jwtService 實現;

  • 1.需要Nuget引入程序包:Microsoft.IdentityModel.Tokens

  • ????????????? Nuget引入程序包:System.IdentityModel.Tokens.Jwt

    圖6

  • 2.需要在配置文件里配置:如圖7所示

  • 圖7

    【這部分的代碼可以聯系朝夕教育助教老師獲取:QQ: 1432568536】如此鑒權中心就OK了;那Api部分呢?下面將繼續說說Api如何基于Jwt授權。

    1. ?? CoreWebApi需要在Startup 下的ConfigureServices中增加如下代碼:

    如圖8所示


    圖8

    2.在Startup中的Configure中指定使用授權;如圖9所示;

    圖9

    3.???在資源Api中標記特性;如圖10所示。

    圖10

    測試:

    第一步:命令啟動WebApi: dotnet Zhaoxi.Core.WebApi.dll --urls="http://*:8004" --?? ?????? ?????? ???? ???????ip="127.0.0.1" --port= 8004

    如圖11所示:

    圖11

    第二步:PostMan 請求Api;圖12所示,表示沒有授權;所以需要授權,那怎么授權呢?需要啟動鑒權中心,獲取令牌Toke

    圖12

    第三步:命令啟動鑒權中心:dotnet Zhaoxi.Core.AuthenticationCenter.dll --urls="http://*:8001" --??? ?????? ? ???? ?????? ip="127.0.0.1" --port= 8001

    如圖13所示

    圖13

    第四步:PostMan請求獲取Token;如圖14所示:

    圖14

    第五步:圖14獲取到了Toke, 就可以帶上token 請求Api,正常獲取數據,圖15,圖16所示。

    圖15

    圖16

    以上就是整套的Jwt權限驗證過程,使用的是Jwt鑒權授權。

    總結

    以上是生活随笔為你收集整理的【朝夕技术专刊】Core3.1WebApi_Filter-Authorize详解的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。