无法设置 ClaimsIdentity

Can't set ClaimIdentity

我有一组声明。我用它来创建一个 ClaimsIdentity。我还使用 OWIN 登录身份。此外,我将其添加到 ClaimsPrincipal.Current.Identities。这是我的代码...

[HttpPost]
[AllowAnonymous]
public async Task<ActionResult> LogonCallBack()
{
    var token = Request.Params["id_token"];

    var validatedToken = TokenService.ValidateIdToken(token);
    var identity = new ClaimsIdentity(validatedToken.Claims);
    HttpContext.GetOwinContext().Authentication.SignIn(new AuthenticationProperties { IsPersistent = false }, identity);
    ClaimsPrincipal.Current.AddIdentity(identity);

    return RedirectToAction("Display");

    //return RedirectToAction("Index", "Error", new { area = "Token Validate Failed." });
}

调试时,我发现我正在检索的一组声明没有问题。我可以创建 ClaimsIdentity。然而,在此之后,当我被重定向到显示页面时,User.Identity.IsAuthenticated 仍然是错误的。 ClaimsPrincipal.Current 的列表中没有添加的身份。

我怎样才能让用户通过身份验证?

您应该使用 SecurityHelper 为当前用户添加身份。

var owinContext = HttpContext.GetOwinContext();
var securityHelper = new Microsoft.Owin.Security.Infrastructure.SecurityHelper(owinContext);
securityHelper.AddUserIdentity(identity); 

我在身份声明中添加了 cookietype 字符串:

var identity = new ClaimsIdentity(validatedToken.Claims, DefaultAuthenticationTypes.ApplicationCookie);

而且我还在中间件管道中添加了相同的字符串,如下所示:

app.SetDefaultSignInAsAuthenticationType(DefaultAuthenticationTypes.ApplicationCookie);
        app.UseCookieAuthentication(new CookieAuthenticationOptions
        {
            AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
            LoginPath = new PathString("/OIDC/Authenticate")
        });