我正在使用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。无论出于何种原因,它仍然坚持要求。
这导致他们在注销时只能看到减少的字段,因此只能看到所有字段。
我是否必须在注销时清除其他内容?