【发布时间】:2016-10-20 03:59:26
【问题描述】:
我有一个 Asp.Net Core RC2 应用程序,但我遇到了 cookie 身份验证问题。在 startup.cs 文件中,我有一个基本配置:
app.UseIdentity();
app.UseCookieAuthentication();
我没有使用 EntityFramework,因为我使用的是文档数据库,为此我实现了 Identity 的接口 IUserStore 和 IRoleStore。
当我登录 localhost 进行调试时,即使我设置了持久性 cookie,它们仍然有效,直到我关闭应用程序。当我重新启动它时,cookie 已过期,服务器将我重定向到登录页面。这说明 cookie 的密钥保存在内存中。为什么它不在数据库上的用户个人资料记录中保留密钥? Cookie 一直有效,直到应用程序保持活动状态。
当我在生产服务器上部署应用程序时,这是一个问题。我正在使用生产/登台解决方案,并且我注意到当我在登台上部署应用程序并切换服务器时,所有登录用户的会话都会过期。这是一个大问题。正如https://docs.asp.net/en/latest/security/data-protection/compatibility/cookie-sharing.html 所建议的那样,我也无法在本地目录上共享cookie 密钥,因为两台服务器不同。我该如何解决?
【问题讨论】:
-
您是否担心迁移到新机器时人们会被注销?为什么?
-
因为敏捷开发我也可以像每天一样切换机器
-
你有什么理由不能使用分布式内存缓存,比如redis? redis 支持随 ASP.NET Core 开箱即用,您只需要一个 redis 集群并将包添加到您的应用程序并调用
AddRedisCache()方法 Startup 类,在您的授权中间件注册之前的某个地方?这使您的应用程序将它们的值存储在 Redis 中,而不是默认的 InMemoryCache -
我从未使用过 Redis。我会仔细看看的。是否存在任何其他不暗示新的外部工具设置的解决方案?
-
查看内置缓存提供程序的 ASP.NET Core 缓存存储库。 github.com/aspnet/Caching/tree/dev/src。还有一个 SqlServer 缓存选项。查看示例文件夹github.com/aspnet/Caching/tree/dev/samples。 Redis 是分布式系统最自然的选择,它是一个分布式内存数据库
标签: cookies asp.net-core asp.net-identity session-cookies