用于localhost开发和部署的MVC Identity Cookie安全性最佳实践

时间:2016-09-25 00:20:07

标签: asp.net-mvc cookies asp.net-identity

我的计算机上有多个ASP MVC项目,并且每个项目都使用身份框架以及具有[Authorize]属性的各种控制器。

我发现如果我使用一个项目登录,然后在localhost上调试另一个项目,我可以绕过其他项目中的安全性。

我知道这是因为localhost只有一个cookie,但是,是否有任何简单的方法可以解决这个问题,并且在部署到公共互联网时是否有任何安全问题?

2 个答案:

答案 0 :(得分:1)

正如@TiesonT所说,您需要为每个应用程序重命名身份验证cookie。您可以在Startup.Auth.cs

中执行此操作
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
    // other properties
    CookieName = "MyCookieName",
});

或者,您可以在IIS中的dev计算机上设置应用程序,并通过hosts文件为它们提供每个自己的域名。即MyApplication.devMyOtherApplication.dev

答案 1 :(得分:0)

ASP.NET为身份验证生成的cookie是经过加密的,因此,不仅任何代码都可以读取cookie值。如果您没有在各个Web项目中更改任何默认设置,则它们都使用相同的名称,并且(在本地运行时)使用相同的密钥加密。您可以通过

避免这种情况
  • (a)为每个站点赋予唯一的cookie名称和
  • (b)向每个站点添加唯一的machine key(假设这不是.NET Core应用程序)。

即使只执行(b)也会使各个站点无法读取彼此的cookie,尽管那样您将要处理异常,因为每个未创建cookie的站点都会尝试并无法解密cookie。< / p>

没有机器密钥,ASP.NET使用自动生成的密钥对诸如auth令牌和viewstate值之类的东西进行加密和解密。只要每个站点都有其自己的应用程序池,您应该不会看到在站点之间共享身份验证cookie。您在本地看到共享的身份验证会话,因为您正在运行Cassini / IIS的单个实例。

我构建了一个simple site用于生成machineKey对(可能应该将其移至HTTPS),或者您可以使用其Github project中的代码在本地生成密钥。