Asp net mvc jwt authentication
Comment mettre en œuvre l’authentification du jeton JWT et valider le jeton JWT dans ASP.NET MVC à l’aide de JWT
Bonjour, lecteurs, et bienvenue sur Code2Night ! Dans cet article de blog, nous allons nous concentrer sur ce dernier et explorer comment implémenter l’authentification par jeton JWT dans ASP.NET MVC. En tant que développeurs, nous comprenons le rôle crucial que joue la sécurité pour garantir l’intégrité et la confidentialité de nos applications. Une technique puissante que nous employons souvent est la mise en œuvre de jetons de sécurité.
Les JSON Web Tokens (JWT) ont gagné en popularité ces dernières années en raison de leur simplicité, de leur efficacité et de leur polyvalence. Ils offrent un moyen sûr et fiable de transmettre des informations entre les parties sous forme de jetons signés numériquement. Ces jetons peuvent être utilisés pour l’authentification, l’autorisation et même l’échange d’informations entre les systèmes.
Tout au long de cet article, nous vous guiderons tout au long du processus de mise en œuvre du jeton JWT Authentification au sein de votre application MVC ASP.NET. Nous allons démêler le fonctionnement interne des jetons JWT, apprendre à les générer et à les valider et à les intégrer de manière transparente dans le flux d’authentification de votre application.
JWT
JSON Web Token (JWT) est une norme ouverte qui définit une manière compacte de transmettre en toute sécurité des informations entre les parties en tant qu’objet JSON. Il est souvent utilisé dans les applications Web pour conserver en toute sécurité les données ou les revendications liées à l’utilisateur qui peuvent être vérifiées facilement,
donc tout d’abord, nous devons installer le package NuGet qui est montré dans l’image ci-dessous :-
Après avoir ajouté les détails, nous devons ajouter les détails JWT dans votre configuration Web, vous pouvez également les ajouter directement sur la page ou vous pouvez le faire dans le fichier web.config. Nous allons donc ajouter ces configurations JWT dans la configuration web. Clé JWT : vous pouvez utiliser n’importe quelle chaîne de nombres aléatoires que vous souhaitez utiliser pour le chiffrement.
Maintenant sur le contrôleur de connexion ou le contrôleur où vous souhaitez créer un jeton JWT pour la connexion. Vous pouvez mettre ce code. Ici, vous pouvez remarquer que nous avons utilisé Authentication.GenerateJwtToken que nous allons créer à l’étape suivante. Cette méthode créera un jeton JWT.
// POST : /account/login [HttpPost] [AllowAnonymous] [ValidateAntiForgeryToken] public async Task<ActionResult> Login(AccountLoginModel viewModel) { try { if ( ! ModelState.IsValid) return View(« index », viewModel) ; chaîne cryptéePwd = viewModel.Password ; var userPassword = Convert.ToString(ConfigurationManager.AppSettings["config :Password"]) ; Var userName = Convert.ToString(ConfigurationManager.AppSettings["config :Nom d’utilisateur"]) ; if (encryptedPwd.Equals(userPassword) && viewModel.Email.Equals(userName)) { var roles = new string[] { « SuperAdmin », « Admin » } ; var jwtSecurityToken = Authentication.GenerateJwtToken(userName, roles. ToList()) ; Session["LoginedIn"] = nom d’utilisateur ; var validUserName = Authentication.ValidateToken(jwtSecurityToken) ; return RedirectToAction(« index », « Home », new { token = jwtSecurityToken }) ; } ModelState.AddModelError(« », « Nom d’utilisateur ou mot de passe invalide. ») ; } catch (Exception e) { ModelState.AddModelError(« », « Nom d’utilisateur ou mot de passe invalide. ») ; } return View(« Index », viewModel) ; }Ajoutez maintenant la classe Authentication dans le dossier model et ajoutez-y ce code. Cette méthode a principalement le code pour générer des jetons pour les revendications de l’utilisateur.
public class Authentication { // Générer token public static string GenerateJwtToken(string username, List<string> roles) { var claims = new List<Claim> { new Claim(JwtRegisteredClaimNames.Sub, nom d’utilisateur), new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid(). ToString()), new Claim(ClaimTypes.NameIdentifier, nom d’utilisateur) } ; Rôles. ForEach(role => { réclamations. Ajouter(new Claim(ClaimsTypes.Role, role)) ; }); var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Convert.ToString(ConfigurationManager.AppSettings["config :JwtKey"]))) ; var creds = new SigningCredentials(clé, SecurityAlgorithms.HmacSha256) ; var expires = DateTime.Now.AddDays(Convert.ToDouble(Convert.ToString(ConfigurationManager.AppSettings["config :JwtExpireDays"]))) ; var token = new JwtSecurityToken( Convert.ToString(ConfigurationManager.AppSettings["config :JwtIssuer"]), Convert.ToString(ConfigurationManager.AppSettings["config :JwtAudience"]), claims, expire : expire, signingCredentials : creds ) ; return new JwtSecurityTokenHandler(). WriteToken(jeton) ; } // Validez le token public static string ValidateToken(string token) { if (token == null) return null ; var tokenHandler = new JwtSecurityTokenHandler() ; var key = Encoding.ASCII.GetBytes(Convert.ToString(ConfigurationManager.AppSettings["config :JwtKey"])) ; try { tokenHandler.ValidateToken(token, new TokenValidationParameters { ValidateIssuerSigningKey = true, IssuerSigningKey = new SymmetricSecurityKey(key), ValidateIssuer = false, ValidateAudience = false, // set clockskew à zéro pour que les tokens expirent exactement à temps d’expiration du jeton (au lieu de 5 minutes plus tard) ClockSkew = TimeSpan.Zero }, out SecurityToken validatedToken) ; var jwtToken = (JwtSecurityToken)validatedToken ; var jti = jwtToken.Claims.First(claim => claim. Tapez == « jti »). Valeur; var userName = jwtToken.Claims.First(sub => sub. Tapez == « sub »). Valeur; retour de l’identifiant de l’utilisateur à partir du jeton JWT si la validation a réussi, retour du nom d’utilisateur ; } catch { // return null si la validation échoue return null ; } } }Exécutez maintenant l’application et connectez-vous avec les informations d’identification
correctes
Vous pouvez voir qu’un jeton unique sera généré et vous pouvez également vérifier les informations stockées dans le jeton à l’étape
suivante
Collez le jeton généré par notre application et ici, elle désérialise les informations cryptées dans un format lisible. Vous pouvez voir ici toutes les revendications que vous avez ajoutées lors de la création du jeton JWT.
Voici donc comment nous pouvons implémenter l’authentification par jeton JWT dans ASP.NET MVC à l’aide de JWT.