System.IdentityModel.Tokens.Jwt庫簡單試用

最近準備把一些外部認證接口認證改成jwt的,在 jwt.io的網站上找了下,.net的庫中排名第一的是微軟自家的庫System.IdentityModel.Tokens.Jwt,然而官方文檔對如何使用它卻語焉不詳,今天試了一下如何用這個微軟官方的JWT庫。簡單的寫個文章總結下

這個庫的核心對象是JwtSecurityTokenHandler,可以通過它實現JWT的生成,讀取,校驗等核心操作,下面就以幾個簡單的示例演示下: 

生成Token

生成token需要使用JwtSecurityTokenHandler.CreateToken函數,這裏使用的key函數比較簡單,直接讀的ASCII碼,傳入的時候需要保持和密碼算法要求位數一致,實際使用時可以進行響應的修改。

    public string GenerateToken(string id, string secret)
    {
        var tokenHandler = new JwtSecurityTokenHandler();
        var key           = Encoding.ASCII.GetBytes(secret);

        var tokenDescriptor = new SecurityTokenDescriptor
        {
            Subject = new ClaimsIdentity(new[] { new Claim("id", id) }),
            Expires = DateTime.UtcNow.AddDays(7),
            SigningCredentials =
                new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature)
        };
        var token = tokenHandler.CreateToken(tokenDescriptor);
        return tokenHandler.WriteToken(token);
    }

 

讀取Token

讀取token需要使用JwtSecurityTokenHandler.ReadToken函數,基本示例如下,由於讀取的是明文部分,故是不需要傳輸密碼的。

    public void ReadToken(string token)
    {
        var tokenHandler = new JwtSecurityTokenHandler();

        var readedToken = tokenHandler.ReadToken(token);
        var jwtToken    = (JwtSecurityToken)readedToken;
        //讀取id
        var userId = jwtToken.Claims.First(x => x.Type == "id").Value;
    }

 

校驗Token

讀取token需要使用JwtSecurityTokenHandler. ValidateToken函數,可以傳入多個校驗參數,時間,密碼等,時間也支持容差,算是功能比較全了。

    public void ValidateToken(string token, string secret)
    {
        var tokenHandler = new JwtSecurityTokenHandler();
        var key          = Encoding.ASCII.GetBytes(secret);
        
        tokenHandler.ValidateToken(token, new TokenValidationParameters
        {
            ValidateIssuerSigningKey = true,
            IssuerSigningKey         = new SymmetricSecurityKey(key),
            ValidateIssuer           = false,
            ValidateAudience         = false,
        }, out SecurityToken validatedToken);

        var jwtToken = (JwtSecurityToken)validatedToken;
        //讀取id
        var userId = jwtToken.Claims.First(x => x.Type == "id").Value;
    }

 

參考文章:

.NET 5.0 - Create and Validate JWT Tokens + Use Custom JWT Middleware

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章