我们正在开发一个 OWIN MVC5 项目。我们使用自己的实现IUserStore<T>
整合用户管理,这是我们公司框架的一部分。到目前为止这工作正常。
我们希望通过声明提供角色成员资格和其他安全配置。我已经看到(并很快测试了)两种实现方式IUserClaimStore<T>
或附加一个ClaimsIdentityFactory
到用户管理器。
在这两种情况下,我都看到以下问题:声明存储在用户的 cookie 中,并且当 Web 应用程序后面的角色或另一个声明发生更改(通过另一个直接访问用户管理存储的应用程序)时,用户 cookie 包含旧的声明,并且用户拥有的权限过多或过少。
我想到的一种可能性是,检查每个请求或某个时间间隔内的请求,用户声明的后端配置是否已更改,如果是,则刷新用户 cookie。
这是正确的方法吗?或者 MVC5/Owin 是否有更优雅/更有效的方法来满足此要求。如果这是正确且唯一的方法,那么检查和刷新 cookie 信息最有效的位置在哪里?
我们将此功能添加到 2.0,以下是您如何配置 CookieMiddleware 以每 30 分钟获取一次新的声明(regenerateIdentity 应调用用于在用户登录时为用户生成 ClaimsIdentity 的代码,并且 validateInterval 控制调用 regenerateIdentity 的频率,但前提是旧的 cookie 仍然有效)
app.UseCookieAuthentication(new CookieAuthenticationOptions {
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login"),
Provider = new CookieAuthenticationProvider {
OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
validateInterval: TimeSpan.FromMinutes(30),
regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
}
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)