如何“挂钩”到 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 */ });
 });

将有多个策略,因此我正在寻找一个中心位置来执行重新身份验证。有没有办法挂接到授权方法?

如何“挂钩”到 mvc6 中的授权方法

在 cookie 选项中有一个Events类。其中有OnValidatePrincipal事件。如果您覆盖它,则每次 cookie 身份验证拉入标识时都会调用它。

Task ValidateAsync(CookieValidatePrincipalContext context);

在此函数中,可以调用 context.RejectPrincipal() 以使标识失效。

ASP.NET 标识使用此标识。标识具有安全标记的概念。这作为声明嵌入在标识中。发生更改时,安全标记将更改。安全标记验证程序连接到 OnValidatePrincipal,后者检查成员资格数据库值并将其与数据库值进行比较。