ASP.net Identity 2.0 注销另一个用户

26
我正在使用asp.net MVC和ASP.net Identity 2.0。
在我的网站上,管理员有禁止用户的选项,当用户被禁止时,我希望他能自动退出网站。
我知道可以通过调用以下方法来注销当前用户:
AuthenticationManager.SignOut();

但是有没有可能注销另一个用户?或者缩短他的会话时间?或者其他什么操作吗?

我知道我可以在控制器上进行全局过滤,禁止被禁用户访问,但该过滤器将针对每个用户运行,因此我对这种解决方案不太满意。


1
你应该缓存每个被封禁的用户,然后在过滤器中删除他的 cookie。 - Fals
2个回答

19
如果你使用"securitystampvalidator"功能,当用户被禁止时只需调用UpdateSecurityStamp(userId),以使任何现有的登录cookie在下次检查时无效。 关于SecurityStamp的更多信息?

我已经在我的项目中添加了那行代码,但用户没有被注销,你能进一步解释一下应该如何使用吗? - hyperN
8
该功能不会立即注销用户,需要配置安全标识上的validateInterval来确定验证cookie的频率。 - Hao Kung

17

您需要在Auth.Config.cs中配置cookie失效:

public void ConfigureAuth(IAppBuilder app)
{
    // important to register UserManager creation delegate. Won't work without it
    app.CreatePerOwinContext(UserManager.Create);

    app.UseCookieAuthentication(new CookieAuthenticationOptions
    {
        Provider = new CookieAuthenticationProvider
        {
            OnValidateIdentity = SecurityStampValidator
                .OnValidateIdentity<UserManager, ApplicationUser, int>(
                    validateInterval: TimeSpan.FromMinutes(10),
                    regenerateIdentityCallback: (manager, user) => user.GenerateUserIdentityAsync(manager))
        },
        // other configurations
    });

    // other stuff
}

当用户被禁止时,按照Hao Kung的说法更新安全标记。

我最近关于这个问题写了一篇博客文章:点击此处阅读


app.CreatePerOwinContext(UserManager.Create) - 对我来说已经足够了。 我正在使用autofac,所以在我的情况下它看起来像这样: app.CreatePerOwinContext(() => DependencyResolver.Current.GetService<Db>()); app.CreatePerOwinContext(() => DependencyResolver.Current.GetService<Security.UserManager<User>>());其中Db是DbContext, 而User是从IdentityUser派生的类。 - Sergey
我不太理解这个。我正在使用标准模板,所以它生成了 app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create); 我猜这与 app.CreatePerOwinContext(UserManager.Create); 相同?在我的情况下它不起作用 :( - Sam
我使用Identity Server 4 Skurba,但我认为在.NET Core 6和Identity Server 4中没有这样的中间件。 - mahdi
@mahdi 这个答案已经超过8年了。那时候还没有 .net Core,更不用说它的v6版本了。当然它不符合你的代码。 - trailmax

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接