.net5實現 JWT (利用Furion白嫖),含Fiddle教程


1 開始 , 首先這里要感謝以下兩位大佬的資料。

2 創建項目,利用Furion 腳手架,輕松創建項目

  • 2.1 文檔參考
    輸入圖片說明
  • 2.2 創建成功
    輸入圖片說明

3 打開項目,run起來,可以看到swagger已經啟動了

swa

4 右鍵Controller文件夾,添加Controller - ValuesController

  • 4.1 代碼, 請留意要繼承 ControllerBase
public class ValuesController : ControllerBase
    {
        [Route("api/value1")]
        public string Value1()
        {
            return "this is value1";
        }

        
        [Route("api/value2")]
        public string Value2()
        {
            return "this is value 2 with auth!";
        }
    }
  • 4.2 運行結果
    輸入圖片說明

5 我們做點手腳,加個權限進去,再訪問,發現權限已經啟用, 方法value2()已經報錯

  • 5.1 代碼
[Authorize]
        [Route("api/value2")]
        public string Value2()
        {
            return "this is value 2 with auth!";
        }
  • 5.2 結果 , 打開神一樣的Fiddle,發現value1()是200, value2()是401(UnAuthorized)
  • value1
    輸入圖片說明
  • value2
    輸入圖片說明

6 我們新建一個授權方法,開始手擼代碼

  • 6.1 創建AuthController
    輸入圖片說明
  • 6.2 將下面的代碼填入方法, 我這里不做過多的原理解釋,也不重復造輪子了, 網上有太多的資料。 假設有賬號和密碼的參數就給於授權 當前真實環境中不可能如此。
[AllowAnonymous]
        [Route("api/auth")]
        [HttpGet]
        public string Auth(string userName, string pwd)
        {
            string output = string.Empty;

            if (!string.IsNullOrEmpty(userName) && !string.IsNullOrEmpty(pwd))
            {
                // 生成 token
                var jwtSettings = App.GetOptions<JWTSettingsOptions>();
                var datetimeOffset = new DateTimeOffset(DateTime.Now);
                if (jwtSettings.ExpiredTime != null)
                    output = JWTEncryption.Encrypt(jwtSettings.IssuerSigningKey,
                        new Dictionary<string, object>()
                        {
                        {"UserId", userName}, // 存儲Id
                        //{"IsAdmin", true}, // 管理員登錄
                        {JwtRegisteredClaimNames.Iat, datetimeOffset.ToUnixTimeSeconds()},
                        {JwtRegisteredClaimNames.Nbf, datetimeOffset.ToUnixTimeSeconds()},
                        {
                            JwtRegisteredClaimNames.Exp,
                            new DateTimeOffset(
                                    DateTime.Now.AddSeconds(
                                        jwtSettings.ExpiredTime.Value * 60 * 60 * 24 * 30))
                                .ToUnixTimeSeconds()
                        },
                        {JwtRegisteredClaimNames.Iss, jwtSettings.ValidIssuer},
                        {JwtRegisteredClaimNames.Aud, jwtSettings.ValidAudience}
                        });

                //// 設置 Swagger 刷新自動授權
                //if (_httpContextAccessor.HttpContext != null)
                //    _httpContextAccessor.HttpContext.Response.Headers["access-token"] = output.AccessToken;
            }

            return output;
        }
  • 6.3 查看結果 ,fiddle查看,雙擊左邊的url, 就會得到生成好的token

  • 生成
    re

  • 雙擊查看token
    輸入圖片說明

  • 7 我們手動將token放到請求的header,模擬客戶端的請求

  • 7.1 復制那段生成好的token, 可以切換到textview中, 請注意在token前面加上 Authorization: Bearer

User-Agent: Fiddler
Host: localhost:44342
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJVc2VySWQiOiJjYWkiLCJpYXQiOjE2MDgwNDY3MjQsIm5iZiI6MTYwODA0NjcyNCwiZXhwIjoxNjU5ODg2NzI0LCJpc3MiOiJkb3RuZXRjaGluYSIsImF1ZCI6InBvd2VyYnkgRnVyaW9uIn0.xNxexPeDUniDCnBwrIjbV62ZFnVdma91Ut7rtx4-t7Q
  • 7.2 結果如下圖
    輸入圖片說明

  • 雙擊
    輸入圖片說明

  • 8 延伸, 當超時后如何刷新token? 還有如何強制token失效? 我們下一章繼續。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM