如何在 ASP.NET Web API 中實作 JWT 驗證?
Jan 20, 2025 pm 09:59 PM在ASP.NET Web API中實作JWT驗證
JWT概述
JSON Web令牌(JWT)是包含聲明的令牌,這些聲明被編碼為三個用句點分隔的base64編碼部分。聲明包含有關使用者、其權限和過期時間的資訊。
實作JWT驗證
要在您的舊版Web API中實作JWT驗證,您可以按照以下步驟操作:
產生JWT令牌
- 使用控制器操作建立一個JWT產生端點。
- 使用System.IdentityModel.Tokens.Jwt包,使用HMACSHA256和對稱金鑰產生JWT令牌。
驗證JWT令牌
- 建立一個從IAuthenticationFilter繼承的JWT驗證屬性。
- 使用該屬性來裝飾需要身份驗證的操作。
- 在您的驗證篩選器中實作AuthenticateJwtToken方法以驗證JWT令牌。
- 使用已驗證的ClaimsPrincipal建立具有附加資訊(例如角色)的本地識別。
配置
- 使用
config.Filters.Add(new AuthorizeAttribute())
為您的API啟用授權。
程式碼範例
產生JWT令牌:
private const string Secret = "[对称密钥]"; public static string GenerateToken(string username, int expireMinutes = 20) { var symmetricKey = Convert.FromBase64String(Secret); var tokenHandler = new JwtSecurityTokenHandler(); var now = DateTime.UtcNow; var tokenDescriptor = new SecurityTokenDescriptor { Subject = new ClaimsIdentity(new[] { new Claim(ClaimTypes.Name, username) }), Expires = now.AddMinutes(Convert.ToInt32(expireMinutes)), SigningCredentials = new SigningCredentials( new SymmetricSecurityKey(symmetricKey), SecurityAlgorithms.HmacSha256Signature) }; var stoken = tokenHandler.CreateToken(tokenDescriptor); var token = tokenHandler.WriteToken(stoken); return token; }
登入後複製
驗證JWT令牌:
protected Task<IPrincipal> AuthenticateJwtToken(string token) { string username; if (ValidateToken(token, out username)) { var claims = new List<Claim> { new Claim(ClaimTypes.Name, username) // 根据需要添加更多声明 }; var identity = new ClaimsIdentity(claims, "Jwt"); var user = new ClaimsPrincipal(identity); return Task.FromResult(user); } return Task.FromResult<IPrincipal>(null); } private static bool ValidateToken(string token, out string username) { username = null; var tokenHandler = new JwtSecurityTokenHandler(); var jwtToken = tokenHandler.ReadToken(token) as JwtSecurityToken; if (jwtToken == null) return false; var symmetricKey = Convert.FromBase64String(Secret); var validationParameters = new TokenValidationParameters { RequireExpirationTime = true, ValidateIssuer = false, ValidateAudience = false, IssuerSigningKey = new SymmetricSecurityKey(symmetricKey) }; var principal = tokenHandler.ValidateToken(token, validationParameters, out _); return principal != null; }
登入後複製
以上是如何在 ASP.NET Web API 中實作 JWT 驗證?的詳細內容。更多資訊請關注PHP中文網其他相關文章!
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱門文章
倉庫:如何復興隊友
3 週前
By 尊渡假赌尊渡假赌尊渡假赌
擊敗分裂小說需要多長時間?
3 週前
By DDD
Hello Kitty Island冒險:如何獲得巨型種子
3 週前
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 週前
By 尊渡假赌尊渡假赌尊渡假赌
公眾號網頁更新緩存難題:如何避免版本更新後舊緩存影響用戶體驗?
3 週前
By 王林

熱門文章
倉庫:如何復興隊友
3 週前
By 尊渡假赌尊渡假赌尊渡假赌
擊敗分裂小說需要多長時間?
3 週前
By DDD
Hello Kitty Island冒險:如何獲得巨型種子
3 週前
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 週前
By 尊渡假赌尊渡假赌尊渡假赌
公眾號網頁更新緩存難題:如何避免版本更新後舊緩存影響用戶體驗?
3 週前
By 王林

熱門文章標籤

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)