Ciao,
Lo scopo è fare una verifica da un URL senza cookie all'url che ha il cookie.
Sì sì, chiaro.
Ho provato a creare due progetti da zero per verificare la cosa ma non riesco a riprodurre il problema. Infatti vedo che il cookie viene correttamente inviato.
Lato ASP.NET Core Web API, sto emettendo un cookie con questo codice. Non si tratta di un cookie di autenticazione, comunque è sufficiente per verificare che poi l'applicazione client lo restituisca al server con la richiesta ajax.
[HttpGet]
public ActionResult<string> Get()
{
string val = Request.Cookies["MyCookie"];
if (val == null)
{
Response.Cookies.Append("MyCookie", Guid.NewGuid().ToString());
}
return Ok(val ?? "");
}
Ho configurato CORS in questo modo, senza configurare il CorsPolicyAccessor.
services.AddCors(corsoptions =>
{
corsoptions.AddPolicy("myPolicy", builder =>
{
builder.AllowAnyMethod().AllowAnyHeader().AllowCredentials().WithOrigins("http://localhost:64067");
});
});
E poi ho aggiunto il middleware così, come avevi fatto tu:
app.UseCors("myPolicy");
app.UseMvc();
Ho avviato l'applicazione web api e ho inviato una richiesta digitando
http://localhost:64957/api/values nella barra degli indirizzi del browser per farle emettere il cookie. Il cookie è stato correttamente emesso, come si vede dall'intestazione Set-Cookie della response. Nel mio caso non ho indicato alcun domain.
Content-Length: 0
Content-Type: text/plain; charset=utf-8
Date: Sun, 02 Sep 2018 11:11:52 GMT
Server: Kestrel
Set-Cookie: MyCookie=1636dad5-9848-4a40-af82-da2dc8970055; path=/
Poi ho avviato l'applicazione lato client, che ha inviato la richiesta ajax così:
<script>
$.ajax({
url: "http://localhost:64957/api/values",
dataType: "json",
xhrFields: {
withCredentials: true
},
crossDomain: true,
cache: false,
type: 'GET',
}).always(function (response) {
console.log("response: ", response);
});
</script>
Vedo che il cookie è stato correttamente inoltrato, come si vede dall'intestazione Cookie della richiesta ajax.
Accept: application/json, text/javascript, */*; q=0.01
Accept-Encoding: gzip, deflate, br
Accept-Language: it-IT,it;q=0.9,en-US;q=0.8,en;q=0.7
Cache-Control: no-cache
Connection: keep-alive
Cookie: MyCookie=1636dad5-9848-4a40-af82-da2dc8970055
Host: localhost:64957
Origin: http://localhost:64067
Pragma: no-cache
Referer: http://localhost:64067/Home/Index
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36
Non so bene perché nel tuo caso il cookie non venga inviato. L'unica differenza con le prove che ho fatto io è nel dominio.
il domain per il cookie è corretto '.principale.com',
Prova semplicemente a togliere il punto iniziale, in modo che sia 'principale.com'.
Come si legge
qui:
Ad esempio, se viene impostato Domain=mozilla.org , il cookie viene incluso in tutti i sottodomini come developer.mozilla.org.
ciao,
Moreno
Modificato da BrightSoul il 02 settembre 2018 13.19 -