.NET自定義認證雖然簡單,但好用
- 2022 年 7 月 9 日
- 筆記
- .netcore, 跟我一起學.NetCore
前言
有這樣一種場景,就是新項目已經集成了認證中心,或者是都用了統一的認證方式(比如現在常用的JWT),這樣對於項目之間的對接就顯得比較方便,至少在認證這塊還是能減少一些工作量的。但當上線的老項目需要對接新項目時,由於有些老項目通常會個性化的生成Token或者是通過一些標識傳到後台進行認證,再加上老項目運行穩定和投入人力比較少的情況,很多時候都需要新的項目兼容老的認證方式,這個時候就可以考慮自定義的認證方式了。
正文
其實主要的原理就是根據項目的認證傳參情況,從請求頭或請求參數中取出對應的Token或標識進行驗證即可;和很多小夥伴們一樣,一開始想到的方法是通過授權過濾器的方式實現即可,但其實可以模仿AddJwtBearer的認證方式自己實現一個,主要的邏輯就是繼承AuthenticationHandler之後,在HandleAuthenticateAsync方法中編寫自己的驗證就OK了,詳細步驟如下:
1. 編寫驗證邏輯
這裡還是創建一個WebAPI項目進行演示
1.1 定義自己的AuthenticationScheme
就像Bearer一樣,定義自己的Scheme,在這個類里也可以定義需要的配置資訊,可以在驗證邏輯的時候用到,如下:
1.2 繼承AuthenticationHandler編寫自己的驗證邏輯
添加一個類繼承自AuthenticationHandler,重寫HandleAuthenticateAsync方法,在裡面可以寫和業務相關的任何驗證邏輯:
1.3 定義一個擴展方法,像AddJwtBearer一樣使用
為了方便調用,按照規範為AuthenticationBuilder定義一個擴展方法:
2. 使用自定義的認證方式
上面的驗證邏輯都寫完了,接下來就像使用JWT認證一樣直接使用即可,由於演示環境用的.NET5,在Startup.cs中註冊相關服務和加上對應的認證中間件就行。
然後在需要認證控制器或Action方法上打上Authorize屬性就行啦:
以上就是自定義認證方式的使用步驟,是不是很簡單,來試一下效果:
加上Token再試試:
用Postman組裝請求頭試試,如下:
在請求頭中加個Token再試試,如下:
好了,自定義認證的思路就是這樣,只需要根據項目對接的情況,在校驗邏輯那塊改成項目實際的場景即可。
源程式碼地址:
//gitee.com/CodeZoe/dot-net-core-study-demo/tree/main/CustomAuth
總結
以上方案其實在之前的項目也使用到了,最近對接新老系統時,又需要這塊,間隔時間有點長,有一些小細節忘了,所以趕緊記錄一下,下次直接翻文章就行啦。
關注「Code綜藝圈」,和我一起學習吧。