2

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

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

4

1 回答 1

3

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

以下示例来自MSDN

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

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

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

于 2012-09-14T00:45:37.260 回答