【问题标题】:How to "hook" into the Authorize method in mvc6如何“挂钩”到 mvc6 中的 Authorize 方法
【发布时间】:2015-12-09 11:07:05
【问题描述】:

在一个 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 方法?

【问题讨论】:

    标签: c# asp.net asp.net-mvc authentication


    【解决方案1】:

    在 cookie 选项中有一个 Events 类。其中是OnValidatePrincipal 事件。如果您覆盖它,则每次 cookie auth 提取身份时都会调用它。

    Task ValidateAsync(CookieValidatePrincipalContext context);
    

    在此函数中,您可以调用context.RejectPrincipal() 使身份无效。

    ASP.NET 身份使用这个。身份具有安全印章的概念。这作为声明嵌入到身份中。当发生更改时,安全标记会更改。 security stamp validator 连接到 OnValidatePrincipal,后者检查成员数据库值并将其与数据库值进行比较。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-17
      • 1970-01-01
      • 2011-10-03
      • 1970-01-01
      • 2021-03-04
      相关资源
      最近更新 更多