IIS混合匿名和Windows身份验证

时间:2016-01-23 12:43:51

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

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

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

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

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

如果WindowsAccountName为空,则用户是匿名用户,否则是域用户。遗憾的是,启用匿名身份验证时,WindowsAccountName始终为空(即使对于域用户),但禁用匿名身份验证时,系统会提示非域用户提供凭据。

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

对我来说,它看起来像是一个捕获22

感谢。

1 个答案:

答案 0 :(得分:3)

这个术语是混合模式认证。我已多次这样做了。

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

内部网站

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

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

湾(来自Forms Auth)使用该用户ID创建表单身份验证故障单。运行您拥有的任何其他登录逻辑。完成。

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