JWT學習文章:
上一篇學習了JWT的基本理論,這一篇將根據原理進行代碼實現。
要想實現jwt的加密解密,要先生成一個SecurityKey,大家可以在網上工具生成一個隨機的密鑰。我是在這里生成的。
下面篇幅大量都是代碼,因為注釋寫得很清楚,因此就不再有過多文字說明。
代碼實現
新建常量類:Const
新建控制器:AuthController
為了過濾哪些接口需要驗證,此處新建一個特性:AuthAttribute
修改原有的Home控制器:
Value2接口標記了Auth特性,在下面驗證時有Auth特性標記的接口才會被要求token。
新建靜態類:AuthExtension,並且增加一個IApplicationBuilder的擴展方法:
在啟動類Startup的請求管道中(Configure)添加上面的擴展方法:
注意一定要把這句話添加在UseRouting()之后,因為在擴展方法中獲取Auth特性只有在注冊了Routing規則后才能獲取到值。
測試
訪問無需權限的Value1接口:
訪問成功!!!
獲取token:
我啟用了swagger,如果沒有啟用在postman中請求https://localhost:5001/Auth?userName=admin&pwd=admin也是一樣的。
代碼中用戶名和密碼我只是簡單的驗證了下是否為空,所以這里填寫什么都能通過。
獲取token成功說明獲取token的代碼沒有問題,邏輯有沒有問題還不能確定,所以要經過后面接口的確認看是否成功。
訪問要求權限驗證的Value2接口:
不帶token:
訪問失敗!!!
帶上token:
成功!!!
靜待三十分鍾(代碼中設置token過期時間為三十分鍾),調用Value2接口:
失敗了!!!錯誤提示是token過期。
如果覺得不保險,還可以逐步調試看一下是否所有邏輯都正確執行,這里就不再進行贅述了。
至此證明我們依照jwt原理寫的權限驗證成功!!!
源碼地址:https://gitee.com/jingboweilanGO/Demo_jwt_core.git
說明:Demo-jwt-core2是本篇文章涉及到的源碼,是使用asp.net core 自帶的jwt方法;
Demo-jwt-core是第三篇jwt文章的源碼,在asp.net core中的使用JWT。