我的计算机上有多个ASP MVC项目,并且每个项目都使用身份框架以及具有[Authorize]
属性的各种控制器。
我发现如果我使用一个项目登录,然后在localhost上调试另一个项目,我可以绕过其他项目中的安全性。
我知道这是因为localhost只有一个cookie,但是,是否有任何简单的方法可以解决这个问题,并且在部署到公共互联网时是否有任何安全问题?
答案 0 :(得分:1)
正如@TiesonT所说,您需要为每个应用程序重命名身份验证cookie。您可以在Startup.Auth.cs
:
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
// other properties
CookieName = "MyCookieName",
});
或者,您可以在IIS中的dev计算机上设置应用程序,并通过hosts文件为它们提供每个自己的域名。即MyApplication.dev
,MyOtherApplication.dev
答案 1 :(得分:0)
ASP.NET为身份验证生成的cookie是经过加密的,因此,不仅任何代码都可以读取cookie值。如果您没有在各个Web项目中更改任何默认设置,则它们都使用相同的名称,并且(在本地运行时)使用相同的密钥加密。您可以通过
避免这种情况即使只执行(b)也会使各个站点无法读取彼此的cookie,尽管那样您将要处理异常,因为每个未创建cookie的站点都会尝试并无法解密cookie。< / p>
没有机器密钥,ASP.NET使用自动生成的密钥对诸如auth令牌和viewstate值之类的东西进行加密和解密。只要每个站点都有其自己的应用程序池,您应该不会看到在站点之间共享身份验证cookie。您在本地看到共享的身份验证会话,因为您正在运行Cassini / IIS的单个实例。
我构建了一个simple site用于生成machineKey对(可能应该将其移至HTTPS),或者您可以使用其Github project中的代码在本地生成密钥。