在asp.net5 / mvc6应用程序中,我使用Azure DocumentDB作为用户存储,并使用CookieAuthentication对用户进行身份验证,如下所示:
List<Claim> claims = new List<Claim>();
claims.Add(new Claim(ClaimTypes.Name, account.UserName));
var user = new ClaimsPrincipal(new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme));
await _httpContextAccessor.HttpContext.Authentication.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, user);
我想保留cookie,这样用户就不必每次都登录。这现在正常工作。但是,当我要删除用户时,用户仍然会拥有cookie,从而访问该网站。
我在控制器上使用例如:
[Authorize("PolicyName")]
政策配置如下:
services.Configure<AuthorizationOptions>(options => {
options.AddPolicy("PolicyName", policy =>
{ /* configuration */ });
});
将有多个政策,因此我正在寻找重新认证的中心位置。有没有办法挂钩Authorize方法?
答案 0 :(得分:1)
在cookie选项中有一个Events
类。其中包括OnValidatePrincipal
事件。如果你覆盖它,那么每当cookie auth引入一个身份时就会调用它。
Task ValidateAsync(CookieValidatePrincipalContext context);
在此功能中,您可以调用context.RejectPrincipal()
使身份无效。
ASP.NET身份使用此功能。身份具有安全标记的概念。这是作为身份内部的声明嵌入的。更改发生时,安全标记会更改。 security stamp validator连接到OnValidatePrincipal
,检查成员资格数据库值并将其与数据库值进行比较。