如何使用MCV5 / OWIN更新cookie声明

时间:2014-03-27 09:02:45

标签: cookies asp.net-mvc-5 wif asp.net-identity owin

我们正在开发一个OWIN MVC5项目。我们使用自己的IUserStore<T>实现来集成用户管理,这是我们公司框架的一部分。到目前为止这个工作正常。 我们希望通过声明提供角色成员资格和其他安全配置。我已经看到(并快速测试)实现IUserClaimStore<T>或将ClaimsIdentityFactory附加到UserManager的方法。

在这两种情况下,我都会看到声明存储在用户的cookie中以及当角色或其他声明在Web应用程序后面发生变化时(通过另一个直接访问用户管理存储的应用程序),用户cookie包含旧的声明,用户拥有的权限太多或太少都不如她应该拥有的那样。

我想到的一种可能性是,检查每个请求或某个时间间隔内的请求,是否更改了用户声明的后端配置,如果是,则刷新用户cookie。

这是正确的方法还是MVC5 / Owin更加优雅/有效地遵守这一要求。如果这是正确的方法,哪里是检查和更新cookie信息的最有效的地方?

3 个答案:

答案 0 :(得分:7)

我们将此功能添加到2.0,这里是如何配置CookieMiddleware每30分钟获取新的声明(regenerateIdentity应调用您用于在用户登录时为其生成ClaimsIdentity的代码,以及validateInterval控制reinrateIdentity的调用频率,但仅限于旧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))
            }
        });

答案 1 :(得分:2)

不,如果您要求cookie始终100%更新,那么这实际上就是您必须要做的事情。

Katana cookie中间件选项类在每次呈现cookie时都有一个OnValidateIdentity回调 - 您可以在那里签到然后重新发布cookie。如果自发布cookie以来用户的密码已更改,ASP.NET Identity 2.0位将如何使cookie过期。

答案 2 :(得分:0)

另一个选择可能是在设计中使用SignalR,其中登录的用户浏览器被指示通过Ajax调用重新获取cookie。