我有一个使用 ASP.Net Identity 配置的双重身份验证方案,用于 MVC 和 JWT,其中用户最初通过 Cookie 身份验证登录,然后在应用程序中使用 JWT 进行 CRUD 操作。
这是如何工作的,当用户成功登录时,还会生成一个 JWT 令牌并作为 cookie 传递给客户端。在客户端,它选择 cookie 并将其用于 Web API 调用。因此,Web API 控制器指定了以下属性。
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
但是我注意到在成功登录并调用控制器(MVC 或 Webapi)后,声明在 ClaimsPrincipal 中重复。我无法弄清楚这是在什么时候发生的,因为我生成声明的唯一时间是发生用户身份验证的时间。
我认为框架中的一些中间件正在做一些我无法弄清楚的事情。 Duplicate claims 的问题不适用于我,因为我没有使用 OpenIdConnect 选项。
这里可能有什么问题?
更新 - 我的登录代码如下。
var signInResult = await _signInManager.PasswordSignInAsync(model.LoginId, model.Password, model.RememberMe, lockoutOnFailure: false);
if (signInResult.Succeeded)
{
_logger.LogInformation($"User {model.LoginId} logged in.");
var claims = await CS.Mediator.Send(new GetUserClaimsQuery { RequestData = user });
await _signInManager.SignInWithClaimsAsync(user, false, claims);
var result = (JwtAuthResult)await _jwtAuthManager.GetTokenAsync(user, claims, CS.CurrentTenant.Secret);
HttpContext.Response.Cookies.Append("token", JsonSerializer.Serialize(result));
return RedirectToAction("Index", "Home");
}