Implémentation de l'authentification JWT dans l'API Web ASP.NET
Présentation de JWT
Un jeton Web JSON (JWT) est un jeton qui contient des revendications codées en trois parties codées en base64 séparées par des points. La revendication contient des informations sur l'utilisateur, ses autorisations et le délai d'expiration.
Mise en œuvre de l'authentification JWT
Pour implémenter l'authentification JWT dans votre ancienne API Web, vous pouvez suivre ces étapes :
Générer un jeton JWT
Vérifier le jeton JWT
Configuration
config.Filters.Add(new AuthorizeAttribute())
pour activer l'autorisation pour votre API. Exemple de code
Générer un jeton 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; }
Vérifier le jeton 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; }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!