登出时未清除声明

时间:2019-12-11 00:12:24

标签: c# authentication asp.net-core

我正在使用asp.net core api 2.2,并且正在使用令牌身份验证。

我这样生成令牌

 Claim[] claims = new[] {
                    new Claim(JwtRegisteredClaimNames.Sub, employee.Id),
                    new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
                    new Claim(JwtRegisteredClaimNames.Iat,new DateTimeOffset(now).ToUnixTimeSeconds().ToString()),
                    new Claim(ClaimTypes.Role, allRoles)
                    // TODO: add additional claims here
                };

            var tokenExpirationMins = configuration.GetValue<int>("Auth:Jwt:TokenExpirationInMinutes");
            SymmetricSecurityKey issuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(configuration["Auth:Jwt:Key"]));

            JwtSecurityToken token = new JwtSecurityToken(
                    issuer: configuration["Auth:Jwt:Issuer"],
                    audience: configuration["Auth:Jwt:Audience"],
                    claims: claims,
                    notBefore: now,
                    expires: now.Add(TimeSpan.FromMinutes(tokenExpirationMins)),
                    signingCredentials: new SigningCredentials(
                        issuerSigningKey, SecurityAlgorithms.HmacSha256)
                );
            string encodedToken = new JwtSecurityTokenHandler().WriteToken(token);

我将响应数据存储在LocalStorage中,当我执行ajax请求时,我将“承载者访问令牌”发送到服务器,然后内置的Asp.net Identity / Core负责通过Authorize标签进行身份验证。 / p>

在控制器中,我有类似的东西

  [AllowAnonymous]
        [HttpGet("GetItems")]
        public IActionResult GetItems()
        {
             var isMember = User.FindFirst(ClaimTypes.NameIdentifier) != null;
            return OK();
        }

现在,登录用户和注销用户都使用此方法。基本上,代码是相同的,除非它们是“成员”,否则它们会看到更多的数据。

现在我注意到的是,当“成员”登录并转到该区域并获得“项目”并显示所有字段后,然后注销并返回该页面的代码行,检查它们是否仍会填充“索赔”。

var isMember = User.FindFirst(ClaimTypes.NameIdentifier) != null;

如果我在哪里刷新页面并返回到该页面,则它将为null。无论出于何种原因,它仍然坚持要求。

这导致他们在注销时只能看到减少的字段,因此只能看到所有字段。

我是否必须在注销时清除其他内容?

0 个答案:

没有答案