如何使 ASP.NET Core 中的自定义声明失效和重新生效?

How to invalidate and revalidate custom claims in ASP.NET Core?

我有一个简单的方法可以添加自定义声明。此方法在登录外调用。

Claim claim = new Claim("SomeCustomClaim", "Test123", ClaimValueTypes.String);
var result = await _userManager.AddClaimAsync((ApplicationUser)user, claim);
if (result.Succeeded)
{
    //do something
}

已编辑: 我正在尝试完成以下任务:

  1. 当用户注销时,它应该删除自定义声明。
  2. 当用户关闭浏览器并清除 cookie 和缓存时,应该删除自定义声明。
  3. 在一定的时间间隔内,它应该重新验证声明。

我试过以下方法:

尝试 1: await _signInManager.SignOutAsync() 什么都不做。一旦用户重新登录,即使我没有再次调用 AddClaim,声明也会以某种方式被添加回去。

尝试 2: 我在注销时明确调用了 RemoveClaimAsync()。虽然这解决了#1,但它要求用户实际单击注销按钮。如果用户只是关闭浏览器,声明将继续存在。

尝试 3: 我在 startup.cs 中添加了以下代码:

services.ConfigureApplicationCookie(options =>
{
options.ExpireTimeSpan = TimeSpan.FromMinutes(1);
});

这似乎使 cookie 完全无效。但是,只要用户再次登录,声明就会以某种方式继续存在,而无需调用 AddClaim。

而且我还没有想出如何在特定时间间隔重新验证声明。

你使用await _userManager.AddClaimAsync()将声明存储在tableAspNetUserCliams中,所以声明不仅在cookie中,而且在数据库中。当您注销时,代码只是删除 cookie 中的声明。如果要删除所有自定义声明,还需要删除数据库中的声明。

当用户关闭浏览器并清除 cookie 和缓存时,一旦用户重新登录,他可能会在数据库中读取声明。所以你可以删除数据库中的claims,然后尝试重新登录,看看claims是否可以添加回来。