Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cookies 如何保存使用MCV5/OWIN更新的Cookie声明_Cookies_Asp.net Mvc 5_Wif_Asp.net Identity_Owin - Fatal编程技术网

Cookies 如何保存使用MCV5/OWIN更新的Cookie声明

Cookies 如何保存使用MCV5/OWIN更新的Cookie声明,cookies,asp.net-mvc-5,wif,asp.net-identity,owin,Cookies,Asp.net Mvc 5,Wif,Asp.net Identity,Owin,我们正在进行OWIN MVC5项目。我们使用自己的IUserStore实现来集成用户管理,这是我们公司框架的一部分。到目前为止,这一切都很好。 我们希望通过声明提供角色成员身份和其他安全配置。我已经看到(并快速测试)实现IUserClaimStore或将ClaimsIdentityFactory附加到用户管理器的方法 在这两种情况下,我都看到了声明存储在用户的cookie中的问题,以及当web应用程序后面的角色或另一个声明发生变化时(通过另一个直接访问用户管理存储的应用程序),users coo

我们正在进行OWIN MVC5项目。我们使用自己的
IUserStore
实现来集成用户管理,这是我们公司框架的一部分。到目前为止,这一切都很好。 我们希望通过声明提供角色成员身份和其他安全配置。我已经看到(并快速测试)实现
IUserClaimStore
或将
ClaimsIdentityFactory
附加到用户管理器的方法

在这两种情况下,我都看到了声明存储在用户的cookie中的问题,以及当web应用程序后面的角色或另一个声明发生变化时(通过另一个直接访问用户管理存储的应用程序),users cookie包含旧声明,并且用户的权限过多或过少

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


这是正确的方法还是MVC5/Owin提供了一种更优雅/高效的方法来满足此要求。如果这是正确且唯一的方法,那么哪里是检查和刷新cookies信息的最有效的地方?

不,如果您要求cookie始终是100%最新的,那么这本质上就是您必须做的事情


Katana cookie中间件选项类在每次出现cookie时都有一个OnValidateIdentity回调——您可以在那里签入,然后重新发布cookie。这是ASP.NET Identity 2.0位在用户的密码自cookie发布后发生更改时使cookie过期的方式。

我们在2.0中添加了此功能,下面是如何配置cookie中间件以每30分钟获取一次新声明(regenerateIdentity应调用用于在用户登录时为其生成ClaimsEntity的代码,validateInterval控制调用regenerateIdentity的频率,但仅当旧cookie仍然有效时)

app.UseCookieAuthentication(新的CookieAuthenticationOptions{
AuthenticationType=DefaultAuthenticationTypes.ApplicationOkie,
LoginPath=新路径字符串(“/Account/Login”),
Provider=新CookieAuthenticationProvider{
OnValidateIdentity=SecurityStampValidator.OnValidateIdentity(
validateInterval:TimeSpan.FromMinutes(30),
regenerateIdentity:(管理器,用户)=>user.GenerateUserIdentityAsync(管理器))
}
});

另一种选择可能是在设计中使用SignalR,在这种设计中,登录的用户浏览器被引导通过Ajax调用重新获取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))
            }
        });