private async Task GuardarToken(LoginUserToken userinfo) { var Fecha_Creacion = DateTime.UtcNow; var Fecha_Expiracion = Fecha_Creacion.AddDays(7); UsuarioToken guardartoken = new UsuarioToken() { Fecha_Creacion = Fecha_Creacion, Fecha_Expiracion = Fecha_Expiracion, Token = userinfo.Token, UsuarioId = userinfo.Id, Valido = true }; await _context.UsuariosTokens.AddAsync(guardartoken); await _context.SaveChangesAsync(); }
private async Task <LoginUserToken> CrearToken(Usuario usuario, string ReturnURL) { var tokenHandler = new JwtSecurityTokenHandler(); // instancia de configuracion de; jwt var key = Encoding.ASCII.GetBytes(_configuration["SecretTokenKey:Key"]); // clave ultra secreta encriptadora var userClaims = await _userManager.GetClaimsAsync(usuario); // claims del usuario var roles = await _userManager.GetRolesAsync(usuario); // roles del usuario var roleClaims = new List <Claim>(); // intancia para convertir los roles en claims for (int i = 0; i < roles.Count; i++) // asignamos cada rol a un claim { roleClaims.Add(new Claim(ClaimTypes.Role, roles[i])); } var claims = new List <Claim>() { new Claim(ClaimTypes.Name, usuario.Id.ToString()) }.Concat(roleClaims).Concat(userClaims).ToList(); var tokenDescriptor = new SecurityTokenDescriptor // intancia con la informacion del hwt { Subject = new ClaimsIdentity(claims), // asignamos la lista con todos los claims del usuario Expires = DateTime.UtcNow.AddDays(7), // agregamos un vida util del token SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature) // ponemos nuestra super clave encriptadora }; var tokenString = ""; do { var token = tokenHandler.CreateToken(tokenDescriptor); // creacion del token tokenString = tokenHandler.WriteToken(token); // serializacion del token } while (await _context.UsuariosTokens.AnyAsync(ut => ut.Token.Equals(tokenString))); LoginUserToken userinfo = new LoginUserToken() // instancia con la informacion que regresara en el login { Email = usuario.Email, Id = usuario.Id, Name = usuario.UserName, ReturnURL = ReturnURL, Token = tokenString }; return(userinfo); }