关于c#:IIS混合匿名和Windows身份验证

IIS Mixed Anonymous and Windows Authentication

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

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

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

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

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

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

对我来说看起来像个22

谢谢。


术语是混合模式身份验证。我已经做了多次。

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

内部网站

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

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

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

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