【问题标题】:How can I secure an ASP .NET website that already uses Forms authentication?如何保护已经使用 Forms 身份验证的 ASP .NET 网站?
【发布时间】:2011-04-12 15:13:48
【问题描述】:

我有一个 ASP .NET 网站,它使用表单身份验证来保护网站的某些部分。我们在服务器上有一个站点的测试版本,并正在通过网络向合作伙伴提供它,例如在 test.mydomain.com。

我需要保护网站的所有部分,以便只有我们的合作伙伴才能使用它。理想情况下,当他们第一次访问站点时弹出基本身份验证会很好,然后让它正常工作,即为某些区域形成身份验证。

然而,ASP .NET 和 IIS 似乎不支持这一点。我知道MADAM,但这与我的需要略有不同。

我正在考虑通过 IP 限制访问,但这有两个缺点,一是需要合作伙伴使用他们的 IP“注册”,二是他们的 IP 可能会改变。

还有其他人有什么建议吗?

【问题讨论】:

  • “但是 ASP .NET 和 IIS 似乎不支持这一点” - 您可能需要详细说明这一点。
  • 如果我在表单身份验证已启用的情况下启用基本身份验证,IIS 管理控制台会显示一条警报,指出“不能同时使用基于挑战和登录重定向的身份验证”。
  • 为什么你的表单认证不够?
  • 它仅适用于网站的某些部分。好的,我们可以更改它,但任何人仍然可以注册帐户。
  • 这是处理分段场景时的经典问题。项目利益相关者不喜欢他们的“测试”网站可以公开访问。

标签: asp.net iis authentication


【解决方案1】:

一种解决方案是检查每个请求是否存在“基本身份验证”cookie。如果它不存在或没有有效数据,则不允许访问该站点。这可以在所有页面继承自或母版页等的基本页面中进行检查。

为了设置 cookie,您可以创建将您的合作伙伴发送到的页面。它可能只是在一个不起眼的网址上,或者要求他们输入密码。基本上哪种安全机制都适合您,但是一旦他们“通过测试”,您就可以设置允许他们访问网站的 cookie。

然后他们将有权访问并能够使用您现有的表单身份验证登录。

这有意义吗?

【讨论】:

  • 感谢 Geoff,这确实有道理。我希望有一个简单的、无代码的解决方案,但这仍然是个好主意。
【解决方案2】:

假设您的站点实现了角色,您可以使用传统的表单身份验证和位置属性来阻止访问。比如:

<configuration>
 <location path="Testing">
  <system.web>
     <authorization>
        <allow roles="partners" />
        <deny users="*" />
     </authorization>
  </system.web>
 </location>
</configuration>

然后,您需要确保需要访问该网站部分的所有用户都处于合作伙伴角色。

【讨论】:

    【解决方案3】:

    嗯……

    好吧,上述解决方案都可以,但总的来说还有更好的方法。但确实需要提前计划。

    1. 您的开发和暂存服务器不应向公众、搜索机器人等开放。
    2. 您的 dev 和 stg 框可以通过 IIS 购买防火墙甚至 ip 访问控制来锁定

    无代码解决方案

    【讨论】:

    • 正如我在问题中提到的,我们知道通过 IP 限制的选项,我只是想探索其他解决方案。
    【解决方案4】:

    最后,我们决定通过表单身份验证保护整个网站并向我们的合作伙伴发放测试帐户是最佳解决方案。

    感谢大家的建议。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-27
      • 2019-09-01
      • 1970-01-01
      • 2023-04-01
      • 2016-10-28
      • 1970-01-01
      • 1970-01-01
      • 2011-09-10
      相关资源
      最近更新 更多