我正在使用带有Identity 2.0的WebApi 2.0
我在startup.auth.cs中定义了ApplicationCookie身份验证,如下所示:
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login"),
CookieName = "MyAppCookieName"
});
AntiForgeryConfig.UniqueClaimTypeIdentifier = ClaimTypes.NameIdentifier;
我在AccountController中有动作登录:
var claims = new List<Claim>();
// create required claims
claims.Add(new Claim(ClaimTypes.NameIdentifier, "harryb"));
claims.Add(new Claim(ClaimTypes.Name, "harryb"));
var identity = new ClaimsIdentity(claims, DefaultAuthenticationTypes.ApplicationCookie);
AuthenticationManager.SignIn(new AuthenticationProperties()
{
AllowRefresh = true,
IsPersistent = true,
ExpiresUtc = DateTime.UtcNow.AddDays(7),
}, identity);
return Ok();
到目前为止,在登录请求中客户端收到了cookie。但是当我提出新请求时,声称是空的?我不想使用标准登录和表格等。我只想对假登录提出一些要求,并在下一个请求中阅读。我缺少什么?
答案 0 :(得分:0)
Finnaly发现了什么问题.. 从这里开始:http://www.asp.net/web-api/overview/security/individual-accounts-in-web-api
找到这个:
特别是,您应用的MVC部分可能会使用表单 身份验证,将凭据存储在cookie中。基于Cookie 身份验证需要使用防伪令牌,以防止 CSRF攻击。这对于Web API来说是一个问题,因为没有 Web API将防伪令牌发送到的便捷方式 客户。 (有关此问题的更多背景信息,请参阅防止CSRF Web API中的攻击。)调用SuppressDefaultHostAuthentication确保 Web API不容易受到存储凭据的CSRF攻击 在饼干中。
所以在WebApiConfig中找到这个 //将Web API配置为仅使用承载令牌身份验证。 //config.SuppressDefaultHostAuthentication();
这给我带来了问题..换句话说,你不能在WebApi中使用cookie身份验证。