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。但当我提出新的请求时,索赔是空的?我不想使用标准登录和表等。我只是想对虚假登录提出一些索赔,并在下一个请求中阅读。我错过了什么?
终于找到了问题所在
…在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身份验证。