我的用于初始化会话的Web API方法成功返回了cookie。前端是角形的,所以我将cookie称为XSRF-TOKEN,因为angular表示会接受它,并在所有后续请求中将其转换为名为X-XSRF-TOKEN的标头。
作为参考,用于创建cookie的Web API GET控制器方法
...
HttpResponseMessage resp = new HttpResponseMessage() {
Content = new JsonContent(results)
};
if (results.Token != null) {
var cookie = new CookieHeaderValue("XSRF-TOKEN", results.Token);
cookie.Expires = DateTimeOffset.Now.AddDays(365);
cookie.Domain = Request.RequestUri.Host;
cookie.Path = "/";
cookie.HttpOnly = false;
resp.Headers.AddCookies(new CookieHeaderValue[] { cookie });
}
return resp;
...
使用Fiddler,我可以在响应中看到cookie。现在我期待两件事
都没有发生(我正在与Fiddler确认)。我已经在同一域(例如localhost)和不同域中尝试了该站点和API。
我检查过的一些来源:
我也尝试添加
$httpProvider.xsrfWhitelistedOrigins = [webServicesPath];
其中webServicesPath是我用于API路径的变量,但没有区别。
答案 0 :(得分:0)
您应该使用类似以下的方式
public void Configure(IApplicationBuilder app, IAntiforgery antiforgery) {
context.Response.Cookies.Append("XSRF-TOKEN", tokens.RequestToken, new CookieOptions() { HttpOnly = false });
}
public void ConfigureServices(IServiceCollection services) {
// Angular's default header name for sending the XSRF token.
services.AddAntiforgery(options => options.HeaderName = "X-XSRF-TOKEN");
}