【问题标题】:IIS Mixed Anonymous and Windows AuthenticationIIS 混合匿名和 Windows 身份验证
【发布时间】:2016-01-23 12:43:50
【问题描述】:

我需要创建一个 ASP .NET 网页(托管在带有 IIS 7.5 的 Windows Server 2008R2 上),域用户和匿名用户应该可以看到该网页,而不会提示他们两个的凭据请求。域用户应有权查看整个页面,而匿名用户可以查看页面的公共部分。

  • 当我启用 Windows 身份验证时: 域用户可以看到整个页面,但会提示匿名用户输入凭据。
  • 当我启用匿名身份验证或两者(匿名和窗口)时:匿名用户可以看到页面的公共部分,但域用户看不到整个页面(他们就像匿名用户一样)。

我使用下面的字符串来区分匿名用户和域用户:

WindowsAccountName = HttpContext.Current.Request.LogonUserIdentity.Name;

如果 WindowsAccountName 为空,则用户为匿名用户,否则为域用户。不幸的是,启用匿名身份验证时,WindowsAccountName 始终为空(即使对于域用户也是如此),但是当禁用匿名身份验证时,会提示非域用户输入凭据。

你有解决这些问题的办法吗?请记住,域用户分布在不同的网络中,因此 IP 地址不是区分域用户和非域用户的好选择。

对我来说它看起来像一个 22 条规则

谢谢。

【问题讨论】:

    标签: c# asp.net authentication iis iis-7.5


    【解决方案1】:

    这方面的术语是混合模式身份验证。我已经多次这样做了。

    这可以通过使用经过 Windows 身份验证的站点来完成,该站点不再从 AD 中提取用户凭据并将其传递给匿名站点。我使用在 5 秒后过期的自定义票证(数据库中的 GUID)完成了此操作。匿名站点获取传递的 GUID,查询数据库并获取用户 ID。我使用包含用户 ID 和时间戳的加密 URL 参数来完成此操作的其他方法。

    内部网站

    创建重定向 URL 站点:将此站点设置为 Window Auth,以便您可以从 Active Directory 中提取用户 ID。为您的用户提供此 URL 和/或使其成为他们在您的 Intranet 上单击的链接。然后此站点调用您的匿名站点并传递用户凭据(登录 ID)。

    一个。这可以通过 URL 上的加密字符串或 cookie 中的加密值来完成。您也可以使用到期日期/时间值进行加密。

    b. (从 Forms Auth 说起)使用该用户 ID 创建一个 Forms Authentication Ticket。运行您拥有的任何其他登录逻辑。完成。

    外部网站 - 无需更改。让用户按原样登录。

    【讨论】:

    • 您写了“创建重定向 URL 站点:将此站点设置为 Window Auth,以便您可以从 Active Directory 中提取用户 ID。”,但如果非域用户访问此站点,则会提示您输入凭据,对吧?
    • Michele,这是一个两步的方法。设置一个 Windows 身份验证站点,以便从活动目录中获取用户帐户。用户不会收到提示,然后您从 AD 中提取用户 ID。然后对其进行加密(如上所述)并将其传递到您在该站点上处理登录的匿名站点。对于最终用户,这是透明的。如果一个人应该只有匿名访问,他们会直接访问目标(非 Active Directory/匿名)站点。
    • @RegencySoftware - 我可以假设这会有效地导致同一应用程序的两个 URL 吗? IIS8(WIN2012)是否仍然是这种情况
    • 这个答案似乎没有回答所提出的问题。 @Michelle 想检查安全上下文并确定用户是否已通过身份验证(阅读问题前的段落)。有两个端点 - 一个经过身份验证,一个没有帮助 - 当您想首先尝试身份验证并故障转移到匿名时,消费者如何知道要命中哪个端点?
    • 问题假设内部站点与外部站点之间没有区别。也就是说,它的网址完全相同。该问题的重点是访问完全相同的网址的不同类型的用户。
    猜你喜欢
    • 2020-12-21
    • 1970-01-01
    • 2019-01-09
    • 1970-01-01
    • 2010-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多