public IActionResult PedirToken( [FromBody] PedirTokenRequest request) { Usuario usuario = _usuarioService.RecuperarPorCorreo(request.codigo); //Validar que haya recuperado if (usuario == null) { return(BadRequest("Usuario invalido: correo")); } //Validar la clave if (EncriptadorHelper.Decrypt(usuario.Password) != request.clave) { return(BadRequest("Usuario invalido: clave")); } //Metadata para el token Claim[] misClaims = new[] { new Claim("correo", usuario.Email), new Claim("id", usuario.IdUsuario.ToString()) }; //Generar el JWT JwtSecurityToken var cred = new SymmetricSecurityKey( Encoding.UTF8.GetBytes( Configuration["SemillaJWT"] )); var firma = new SigningCredentials(cred, SecurityAlgorithms.HmacSha256); JwtSecurityToken jwt = new JwtSecurityToken( issuer: "midominio.com", audience: "midominio.com", claims: misClaims, expires: DateTime.Now.AddMinutes(5), signingCredentials: firma ); //Devolver el hash string ruta = new JwtSecurityTokenHandler().WriteToken(jwt); return(Ok( new { usuario = usuario, token = ruta } )); }
/// <summary> /// Obtiene Token /// </summary> /// <param name="urlBase">p.ej. url = Application.Current.Resources["UrlAPI"].ToString()</param> /// <param name="servicePrefix">p.ej. /apiActores</param> /// <param name="controller">p.ej. /Personas</param> /// <param name="peticion">Models PedirTokenRequest</param> /// <returns></returns> public async Task <Respuesta> GetTokenAsync(string urlBase, string servicePrefix, string controller, PedirTokenRequest peticion) { try { var requestString = JsonConvert.SerializeObject(peticion); var content = new StringContent(requestString, Encoding.UTF8, "application/json"); var client = new HttpClient { BaseAddress = new Uri(urlBase) }; var url = $"{servicePrefix}{controller}"; var response = await client.PostAsync(url, content); var result = await response.Content.ReadAsStringAsync(); if (!response.IsSuccessStatusCode) { return(new Respuesta { EsExitoso = false, Mensaje = result, Resultado = null }); } var token = JsonConvert.DeserializeObject <PedirTokenRequest>(result); return(new Respuesta { EsExitoso = true, Mensaje = "", Resultado = token }); } catch (Exception ex) { return(new Respuesta { EsExitoso = false, Mensaje = ex.Message, Resultado = null }); } }