web api无法按要求阅读声明

时间:2016-08-30 10:14:05

标签: c# asp.net-web-api asp.net-identity

我正在使用带有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。但是当我提出新请求时,声称是空的?我不想使用标准登录和表格等。我只想对假登录提出一些要求,并在下一个请求中阅读。我缺少什么?

1 个答案:

答案 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身份验证。