c# - ASP.Net 核心重复声明与 Asp.Net 核心身份和多个身份验证方案
问题描述
我正在使用 ASP.Net Identity 配置双重身份验证方案,以与 MVC 和 JWT 一起使用,其中用户最初通过 Cookie 身份验证登录,然后在应用程序 CRUD 操作中使用 JWT。
其工作原理是,当用户成功登录时,还会生成一个 JWT 令牌并作为 cookie 传递给客户端。在客户端,它选择 cookie 并将其用于 Web API 调用。因此,Web API 控制器指定了以下属性。
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
但是我注意到,在成功登录并调用控制器(MVC 或 Webapi)后,声明在 ClaimsPrincipal 中重复。我无法弄清楚这发生在什么时候,因为我生成声明的唯一时间是用户身份验证发生的时间。
我认为框架中的一些中间件正在做一些我无法弄清楚的事情。Duplicate claim 中的问题不适用于我,因为我没有使用 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");
}
解决方案
推荐阅读
- sql-server - 将十六进制字符串转换为整数的样式
- angularjs - 导出 pdf 适用于除 Internet Explorer 11 以外的所有浏览器,角度为 5
- c++ - 当返回类型是模板类的内部类时,为什么在模板声明和返回类型之间需要`typename`?
- web - OAuth2.0 和 OpenID 良好实践
- elasticsearch - Filebeat 添加不需要的空白字段
- python-3.x - 在 Python 中创建特定间隔的年月列表
- javascript - 仅在选择特定值时显示表单域
- sql - 使用 if 语句加入 MS-Access SQL 重复条目
- select - 如何在plsql块内的SELECT语句中传递不同的变量值
- excel - VBA 编译 , 和 ; 不一致,