JWT學習筆記Part2(驗證Token)-完結篇

前篇請參考這裡,因為使用Jose JWT,處理起來相對簡單很多,以下是驗證資料是否被竄改過,只要有被改過,無論是簽章,或是header、payload,改過都會驗證失效的。

[HttpGet]
public Dictionary<string, string> VerifyToken(string token)
{
    RSAParameters rsaParams;
    var verifyPass = false;
    var exp = "";
    var errMsg = "";

    try
    {
        using (var tr = new StringReader(File.ReadAllText(HttpContext.Current.Server.MapPath("~/App_Data/JwtKey/public_Key.pem"))))
        {
            var pemReader = new PemReader(tr);
            var publicKeyParams = pemReader.ReadObject() as RsaKeyParameters;
            if (publicKeyParams == null)
            {
                throw new Exception("無法讀取公鑰(Could not read RSA public key)");
            }
            rsaParams = DotNetUtilities.ToRSAParameters(publicKeyParams);
        }
        using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
        {
            rsa.ImportParameters(rsaParams);
            // 如果表頭、內容、簽章失效皆會拋出Exception
            var payload = JsonConvert.DeserializeObject<Dictionary<string, string>>(Jose.JWT.Decode(token, rsa, Jose.JwsAlgorithm.RS256));
            // 將payload當作Dictionary使用
			exp = payload["exp"];
            // 檢查有效時間
            .....
			verifyPass = true;
        }
    }
    catch (Exception e)
    {
        errMsg = e.Message;
    }

    var result = new Dictionary<string, string>()
    {
        { "VerifyPass", verifyPass.ToString() },
        { "exp", exp },
        { "ErrMsg", errMsg }
    };
    return result;
}

More From Forest Beat

冬の前田森林公園のフリ

在Linux中列出目錄的空間使用大小

列出檔案大小的指令是ls,但是這個指令列出的目錄大小是固定的,又不能自動加總,所以想要知道/home/下各個使用者用了多少檔案空間,那可以參考以下指令
技術
0
minutes
高層ビルのフリー写真素材

Windows 10中的小算盤不見了?

如題小算盤不見了怎麼辦?其實很簡單,搜尋商店,然後輸入關鍵字,安裝一下就可以~~~
技術
0
minutes
桜のフリ

Top 20 Best Programming Languages To Learn in 2024

IT小菜雞必需掌握一種以上的程式語言,因為程式語言是實現軟體解決方案的工具。
技術
0
minutes
サクラのフリ

快速了解MVC、MVP、MVVM、MVI架構的演進

MVC、MVP、MVVM、MVI 都是軟體架構模式,用來組織和管理程式碼,提高程式碼的可讀性、可維護性和可擴展性。
技術
0
minutes
spot_imgspot_img