J'ai couru dans un problème où le navigateur refuse de servir du contenu qu'il avait récupéré lors de la demande transmise dans les cookies (par exemple, le xhr avait ses withCredentials=true
), et le site a Access-Control-Allow-Origin
ensemble de *
. (L'erreur dans google Chrome a été, "Impossible d'utiliser le caractère générique dans Access-Control-Allow-Origin lorsque les informations d'identification indicateur est vrai.")
Bâtiment sur la réponse de @jgauffin, j'ai créé ce, qui est essentiellement un moyen de contourner le navigateur de vérification de sécurité, de sorte caveat emptor.
public class AllowCrossSiteJsonAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
// We'd normally just use "*" for the allow-origin header,
// but Chrome (and perhaps others) won't allow you to use authentication if
// the header is set to "*".
// TODO: Check elsewhere to see if the origin is actually on the list of trusted domains.
var ctx = filterContext.RequestContext.HttpContext;
var origin = ctx.Request.Headers["Origin"];
var allowOrigin = !string.IsNullOrWhiteSpace(origin) ? origin : "*";
ctx.Response.AddHeader("Access-Control-Allow-Origin", allowOrigin);
ctx.Response.AddHeader("Access-Control-Allow-Headers", "*");
ctx.Response.AddHeader("Access-Control-Allow-Credentials", "true");
base.OnActionExecuting(filterContext);
}
}