如何“挂钩”到 mvc6 中的授权方法
本文关键字:授权 方法 mvc6 挂钩 如何 | 更新日期: 2023-09-27 18:26:12
在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 */ });
});
将有多个策略,因此我正在寻找一个中心位置来执行重新身份验证。有没有办法挂接到授权方法?
在 cookie 选项中有一个Events
类。其中有OnValidatePrincipal
事件。如果您覆盖它,则每次 cookie 身份验证拉入标识时都会调用它。
Task ValidateAsync(CookieValidatePrincipalContext context);
在此函数中,可以调用 context.RejectPrincipal()
以使标识失效。
ASP.NET 标识使用此标识。标识具有安全标记的概念。这作为声明嵌入在标识中。发生更改时,安全标记将更改。安全标记验证程序连接到 OnValidatePrincipal
,后者检查成员资格数据库值并将其与数据库值进行比较。