Web API不能在请求时读取声明

本文关键字:读取 声明 请求 API 不能 Web | 更新日期: 2023-09-27 18:04:46

我使用WebApi 2.0与Identity 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。但当我提出新的请求时,索赔是空的?我不想使用标准登录和表等。我只是想对虚假登录提出一些索赔,并在下一个请求中阅读。我错过了什么?

Web API不能在请求时读取声明

终于找到了问题所在
…在ASP中保护具有个人帐户和本地登录的Web API。. NET Web API 2.2

找到这个:

特别是,你的应用的MVC部分可能会使用表单身份验证,将凭据存储在cookie中。基于cookie的身份验证需要使用防伪令牌,以防止CSRF攻击。这是web api的一个问题,因为没有web API将防伪令牌发送到客户端。(有关此问题的更多背景信息,请参阅防止CSRFWeb API中的攻击)调用SuppressDefaultHostAuthentication确保Web API不容易受到来自存储凭据的CSRF攻击在饼干。

在WebApiConfig中找到这个//配置Web API只使用承载令牌认证。//config.SuppressDefaultHostAuthentication ();

这给我带来了一个问题…换句话说,你不能在WebApi中安全地使用cookie身份验证。