什么时候可以通过HttpContext.User.Claims访问ASP.NET Core声明?

时间:2016-08-22 06:55:43

标签: asp.net-core claims-based-identity

设定:

  1. 创建一个包含大量声明的ClaimsPrincipal
  2. 致电httpContext.Authentication.SignInAsync("MyAuthScheme", myClaimsPrincipal, myAuthProperties)
  3. 尝试遍历httpContext.User.Claims上的所有声明。
  4. 结果:

    pt。的索赔。 1不在httpContext.User.Claims - 集合中。

    为什么?

    编辑:

    var claims = GetPersistentClaims(username.ToLowerInvariant());
    var identity = new ClaimsIdentity(claims, AuthenticationScheme);
    var principal = new ClaimsPrincipal(identity);
    var authenticationManager = _httpContextAccessor.HttpContext.Authentication;
    var properties = new AuthenticationProperties {IsPersistent = isPersistent};
    await authenticationManager.SignInAsync(AuthenticationScheme, principal, properties);
    // This is where I inspect _httpContextAccessor.HttpContext.User.Claims.
    

1 个答案:

答案 0 :(得分:0)

当您致电SignInAsync时,身份验证处理程序会调用自己的SignInAsync()。在您的情况下,它是cookie身份验证(它只是设置cookie)。

如果您要对用户进行身份验证,则需要致电authenticationManager.AuthenticateAsync(AuthenticationScheme);

修改

它在SignInAsync之后无效,因为当前请求没有Cookie。但HttpContext.User = principal ;可能是一种解决方案。

ps:通常您使用下一个请求的声明。