如何"钩"进入mvc6中的Authorize方法

时间:2015-12-09 11:07:05

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

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

1 个答案:

答案 0 :(得分:1)

在cookie选项中有一个Events类。其中包括OnValidatePrincipal事件。如果你覆盖它,那么每当cookie auth引入一个身份时就会调用它。

Task ValidateAsync(CookieValidatePrincipalContext context);

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

ASP.NET身份使用此功能。身份具有安全标记的概念。这是作为身份内部的声明嵌入的。更改发生时,安全标记会更改。 security stamp validator连接到OnValidatePrincipal,检查成员资格数据库值并将其与数据库值进行比较。