Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

554
Vistas
Solicitud AJAX de no enviar cookies (NET 5)

Con fines de prueba, se configuran dos aplicaciones web, una aplicación de "cliente" (localhost) y una aplicación de servidor (aplicación web de Azure). El cliente envía una solicitud AJAX al servidor y recibe una cookie en respuesta. Luego hace otra llamada AJAX al servidor, pero no hay ninguna cookie en la solicitud, falta.

Aquí está la configuración del servidor (configuración de CORS; https://localhost:44316 es mi URL de "cliente"):

 public class Startup { public Startup(IConfiguration configuration) { Configuration = configuration; } public IConfiguration Configuration { get; } public void ConfigureServices(IServiceCollection services) { services.AddCors(o => { o.AddPolicy("policy1", builder => builder.WithOrigins("https://localhost:44316") .AllowAnyMethod() .AllowAnyHeader() .AllowCredentials()); }); services.AddControllers(); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { app.UseHttpsRedirection(); app.UseRouting(); app.UseCors("policy1"); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); } }

Aquí está el primer controlador, devolviendo la cookie:

 [Route("api/[controller]")] [ApiController] public class AController : ControllerBase { [HttpPost] public IActionResult Post() { var cookieOptions = new CookieOptions { HttpOnly = true, Expires = DateTime.Now.AddMinutes(10), SameSite = SameSiteMode.None }; Response.Cookies.Append("mykey", "myvalue", cookieOptions); return Ok(); } }

Aquí está el segundo controlador, que debería recibir la cookie (pero no la recibe):

 [Route("api/[controller]")] [ApiController] public class BController : ControllerBase { [HttpPost] public IActionResult Post() { var x = Request.Cookies; return Ok(JsonConvert.SerializeObject(x)); } }

Y aquí está el script de llamada del "cliente" (primera y segunda llamada, respectivamente):

 function Go() { $.ajax({ url: 'https://somewebsite.azurewebsites.net/api/a', type: 'post', xhrFields: { withCredentials: true }, success: function (data, textStatus, jQxhr) { console.log(data); }, error: function (jqXhr, textStatus, errorThrown) { console.log(errorThrown); } }); } function Go2() { $.ajax({ url: 'https://somewebsite.azurewebsites.net/api/b', type: 'post', xhrFields: { withCredentials: true }, success: function (data, textStatus, jQxhr) { console.log(data); }, error: function (jqXhr, textStatus, errorThrown) { console.log(errorThrown); } }); }

¿Alguien tiene una idea de cuál podría ser el problema aquí?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Como decía este documento :

Las cookies que afirman SameSite=None también deben marcarse como seguras

Pero no lo hiciste, así que usa esto en su lugar:

 var cookieOptions = new CookieOptions { HttpOnly = true, Expires = DateTime.Now.AddMinutes(10), SameSite = SameSiteMode.None, Secure = true };

Y este es el resultado de mi prueba:

ingrese la descripción de la imagen aquí

over 4 years ago · Santiago Trujillo Denunciar

0

Primero debe conocer AddTransient , AddScoped y AddSingleton. La publicación a continuación será útil para usted.

Diferencias de los servicios AddTransient, AddScoped y AddSingleton

Y necesita usar AddSingleton , y obtendrá el valor de la cookie por clave.

Blogs oficiales: Cómo trabajar con cookies en ASP.NET Core

Funciona para mí, puede encontrar un código de muestra en los blogs que proporcioné.

Mi prueba

1. código de prueba

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

2. resultado de la prueba en otro controlador.

ingrese la descripción de la imagen aquí

over 4 years ago · Santiago Trujillo Denunciar

0

Me gusta bastante el estilo de lo que está haciendo aquí en términos de un SPA que obtiene cookies de una API. Algunas recomendaciones a continuación, basadas en la experiencia en el tratamiento de estos problemas.

PROBLEMA

Está llamando desde el navegador a una API en un dominio diferente, lo que significa que la cookie es de un tercero y los navegadores modernos la eliminarán agresivamente.

  • Origen web: localhost:44316
  • Dominio API: myazurewebapp.com

SameSite=None es la solución teórica de los documentos estándar, pero estos a menudo no explican el comportamiento actual del navegador:

  • Tienes que configurar la propiedad Secure , como dice Jason Pan
  • Pero seguirá sin funcionar en el navegador Safari y tal vez en algunos otros.
  • Espere que las cookies de sitios cruzados se coloquen en todos los navegadores en un futuro próximo

SOLUCIÓN

La opción preferida es diseñar dominios de hospedaje para que solo se utilicen cookies first party , y muchas empresas de software lo han hecho. Se puede hacer ejecutando la API en un dominio secundario o hermano del origen web:

  • Origen web: www.ejemplo.com
  • Dominio API: api.example.com

En una PC de desarrollador, puede hacer esto simplemente actualizando su archivo de hosts. Tenga en cuenta también que puede ejecutar componentes web y API en diferentes puertos y seguirán siendo el mismo sitio:

 127.0.0.1 localhost www.example.com api.example.com :1 localhost

El navegador seguirá realizando solicitudes CORS, pero considerará que la cookie emitida por la API se encuentra en el mismo sitio que el origen web. A continuación, también puede cambiar la configuración de las cookies para usar SameSite=strict , para mayor seguridad.

INFORMACION ADICIONAL

En Curity, hemos publicado algunos artículos recientes sobre seguridad web que están estrechamente relacionados con su pregunta, ya que las cookies seguras utilizadas en la seguridad de OpenID Connect también han tenido que lidiar con problemas de cookies descartadas:

  • Código
  • Artículos
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda