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

HCL*_*HCL 7 cookies wif owin asp.net-mvc-5 asp.net-identity

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

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

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

这是正确的方法还是MVC5/Owin提供更优雅/有效的方式来满足此要求.如果这是正确的方法,哪里是检查和更新cookie信息的最有效的地方?

Hao*_*ung 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))
            }
        });
Run Code Online (Sandbox Code Playgroud)