ASP.Net 核心重复声明与 Asp.Net 核心身份和多种身份验证方案

时间:2021-05-11 11:52:43

标签: c# asp.net-core asp.net-identity .net-5

我有一个使用 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");
            }

0 个答案:

没有答案