Asp.net mvc ASP.NET MVC如何使用CookieAuthenticationMiddleware对Cookie进行内部验证
我试图弄清楚ASP.NET如何在内部验证cookie是否允许用户访问应用程序 CookieAuthenticationMiddleware将使用加密值设置.AspNet.Cookies。在.NET对请求成功解密cookie后,会发生什么验证 如果我有一个在用户登录后设置身份验证Cookie的应用程序(#1),并且我创建了一个也在本地主机上运行的完整的新应用程序(#2),也就是使用CookieAuthentication在本地开发IISExpress。当我访问#2时,它将从#1读取cookie,并允许用户访问应用程序Asp.net mvc ASP.NET MVC如何使用CookieAuthenticationMiddleware对Cookie进行内部验证,asp.net-mvc,authentication,cookies,owin,Asp.net Mvc,Authentication,Cookies,Owin,我试图弄清楚ASP.NET如何在内部验证cookie是否允许用户访问应用程序 CookieAuthenticationMiddleware将使用加密值设置.AspNet.Cookies。在.NET对请求成功解密cookie后,会发生什么验证 如果我有一个在用户登录后设置身份验证Cookie的应用程序(#1),并且我创建了一个也在本地主机上运行的完整的新应用程序(#2),也就是使用CookieAuthentication在本地开发IISExpress。当我访问#2时,它将从#1读取cookie,并
我试图了解cookie身份验证的限制。主要验证是加密和过期。如果应用程序共享加密上下文(如机器密钥),则它们可以共享身份验证cookie(前提是满足其他客户端共享规则,如域和路径)。因此,是的,默认情况下,在同一台机器上使用IIS Express localhost的两个应用程序将共享cookie 过期时间也嵌入到加密值中,因此客户端不能篡改它。实际上没有任何“验证”。cookie的加密密钥用于引用应该“登录”的用户。它的工作方式与会话非常相似,其中会话cookie保存了一个加密的会话id,服务器可以使用该id查找和恢复会话 加密/解密基于机器密钥,该密钥可以在Web.config中显式设置,也可以由ASP.NET自动生成。只有共享相同机器密钥的应用程序才能解密cookie,这就是为什么保护您的机器密钥如此重要的原因 无论如何,这里有两个因素。首先,cookie是域绑定的:只有设置了cookie的域的域或子域才会获得cookie。这由客户端(即浏览器)处理。您的两个应用程序当前都可以看到cookie,因为它们都在本地主机上运行。但是,如果您将一个部署在foo.com,另一个部署在bar.com,那么他们将无法再看到彼此的cookie 其次,机器密钥通常由服务器提供(除非在Web.config per app中明确设置)。因此,在同一台机器上运行的站点通常可以解密彼此的cookie(假设它们首先看到cookie,这也是基于它们的域) 现在还不清楚你对这个安排是否满意。如果您的目标是隔离本地运行的两个站点,这样它们就不会共享cookie,那么您有两个选择
.Site1.Auth
和另一个.Site2.Auth
,而不是使用默认的cookie名称。然后,即使任何一个站点也会收到另一个站点的cookie,它也会忽略它,因为它不是该站点的auth cookie但是,如果您打算在生产中也依赖此行为(即,您实际上希望登录到一个站点以登录到另一个站点),则需要在两个站点的Web.config文件中将机器密钥显式设置为相同的值。此外,您需要将它们部署在同一个域上,或者至少部署在该域的子域上。对于子域,您需要将cookie域设置为通配符域
.mydomain.com
。然后,你可以在foo.mydomain.com
和bar.mydomain.com
上找到一个,他们都会看到cookie,因为cookie是在.mydomain.com
上设置的。如果保留默认设置,在站点的实际域上设置,则bar.mydomain.com
无法看到foo.mydomain.com
设置的cookie,因为该cookie将仅显式设置为foo.mydomain.com
,感谢您详细的回答。