HttpContext.Current.User.Identity.Name共享相同网站的所有应用程序:这不是不安全吗?

时间:2012-09-13 20:31:55

标签: asp.net authentication forms-authentication

我非常惊讶:我在同一个网站下创建了2个独立的应用程序(让2个不同的客户说出来)。我在每个web.config中都有单独的登录/密码列表,但我可以将第一个应用程序的HttpContext.Current.User.Identity.Name放到第二个应用程序中!

会话变量不是在2之间共享,但对于HttpContext.Current.User.Identity.Name来说这仍然是不安全的吗?这意味着客户端2将能够访问客户端1用户浏览到客户端2应用程序,而无需在客户端2网站中进行身份验证。

1 个答案:

答案 0 :(得分:3)

如果您在每个应用的web.config中的machinekey元素中使用不同的解密密钥,则会确保用户无法在不重新登录的情况下在应用之间导航。

以下示例来自MSDN

<machineKey
  validationKey="C50B3C89CB21F4F1422FF158A5B42D0E8DB8CB5CDA1742572A487D9401E3400267682B202B746511891C1BAF47F8D25C07F6C39A104696DB51F17C529AD3CABE" 
  decryptionKey="8A9BE8FD67AF6979E7D20198CFEA50DD3D3799C77AF2B72F" 
  validation="SHA1" />

您也可以使用IsolateApps修饰符而不是生成键,但我发现在您希望它们共享的级别专门设置键可以让您更好地控制该过程。您可以在线找到各种工具来生成这些密钥,或者您可以根据Microsoft的加密类自行推出。

请注意,IIS结构中较高级别的web.config中的密钥集会自动“下坡”流向子应用程序,除非您在其web.config中专门覆盖它。这可能是你案件中发生的事情。