如何使 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
}
已编辑:
我正在尝试完成以下任务:
- 当用户注销时,它应该删除自定义声明。
- 当用户关闭浏览器并清除 cookie 和缓存时,应该删除自定义声明。
- 在一定的时间间隔内,它应该重新验证声明。
我试过以下方法:
尝试 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是否可以添加回来。
我有一个简单的方法可以添加自定义声明。此方法在登录外调用。
Claim claim = new Claim("SomeCustomClaim", "Test123", ClaimValueTypes.String);
var result = await _userManager.AddClaimAsync((ApplicationUser)user, claim);
if (result.Succeeded)
{
//do something
}
已编辑: 我正在尝试完成以下任务:
- 当用户注销时,它应该删除自定义声明。
- 当用户关闭浏览器并清除 cookie 和缓存时,应该删除自定义声明。
- 在一定的时间间隔内,它应该重新验证声明。
我试过以下方法:
尝试 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是否可以添加回来。