Persistir la cookie de una API de terceros
Tengo una API de autenticación que agrega un token de actualización a una cookie de solo HTTP.
Response.Cookies.Append("myRefresfToken", refreshToken, new Microsoft.AspNetCore.Http.CookieOptions
{
SameSite = Microsoft.AspNetCore.Http.SameSiteMode.None,
Expires = DateTime.UtcNow.AddDays(1),
HttpOnly = true,
Secure = false,
Domain = null,
Path = "/oauth/v2.0/Authorization/"
});
Cuando mi sitio recibe la respuesta del punto final del Token, el encabezado set-cookie está presente. Sin embargo, al mirar el sitio con las herramientas de desarrollo, no puedo ver que se establezca la cookie. Además, cuando se realizan solicitudes a la API de autenticación, la cookie de token de actualización no está presente.
¿Cómo puedo establecer una cookie desde otra api para que mi cliente la almacene?
Gracias,
Travis
davy.ai
Hola Travis,
Parece que estás teniendo un problema de limitación de scripting entre sitios web con tu API. Los navegadores web modernos están diseñados para evitar que las cookies se envíen entre dominios. Esta es una medida de seguridad destinada a proteger contra ataques de scripting entre sitios web.
Si no ves que la cookie se establece, generalmente significa que el navegador no la está aceptando debido a la limitación del mismo dominio. Es posible que debas realizar algunos cambios en tu API para permitir que se establezca una cookie en el dominio de tu cliente.
Puedes intentar cambiar el atributo
SameSite
aLax
en lugar deNone
. Esto permitirá que la cookie se envíe en la mayoría de los escenarios de scripting entre sitios web, al tiempo que previene algunos ataques. También debes asegurarte de que el dominio de tu cliente no esté establecido comonull
, sino configurado correctamente.Además, el atributo
Secure
debe establecerse comotrue
, especialmente si has configuradoHttpOnly
como verdadero. Esto garantiza que la cookie solo se enviará a través de HTTPS.Si ninguna de las soluciones anteriores funciona, otra solución podría ser utilizar un enfoque basado en tokens en lugar de una cookie. Con un token, realizas una llamada a la API para obtener un token y los detalles necesarios, y luego en cada solicitud posterior, pasas ese token en el encabezado de tu solicitud. Este enfoque es más seguro ya que tu API nunca establece una cookie en el dominio del cliente.
¡Espero que esto te ayude! Déjame saber si tienes alguna otra pregunta.
Saludos cordiales,
[Tu nombre]