我需要创建一个ASP .NET网页(托管在带有IIS 7.5的Windows Server 2008R2上),域用户和匿名用户应该可以看到它,而不会提示两者的凭据请求。域用户应该被授权查看整个页面,而匿名用户可以看到页面的公共部分。
我使用以下字符串来区分匿名用户和域用户:
WindowsAccountName = HttpContext.Current.Request.LogonUserIdentity.Name;
如果WindowsAccountName为空,则用户是匿名用户,否则是域用户。遗憾的是,启用匿名身份验证时,WindowsAccountName始终为空(即使对于域用户),但禁用匿名身份验证时,系统会提示非域用户提供凭据。
你有解决这些问题的方法吗?请记住,域用户分布在不同的网络中,因此IP地址不是区分域用户和非域用户的好选择。
对我来说,它看起来像是一个捕获22
感谢。
答案 0 :(得分:3)
这个术语是混合模式认证。我已多次这样做了。
这可以通过使用Windows身份验证的站点来完成,该站点不再从AD中提取用户凭据并将其传递给匿名站点。我使用自定义票证(数据库中的GUID)在5秒内到期。匿名站点接受GUID传递,查询数据库并获取用户ID。我使用加密的URL参数完成此操作的其他方法包含用户ID和时间戳。
内部网站
创建重定向URL站点:将此站点设置为Window Auth,以便您可以从Active Directory中提取用户ID。为您的用户提供此URL和/或将其作为他们在您的Intranet上单击的链接。然后,此站点调用您的匿名站点并传递用户凭据(登录ID)。
一个。这可以通过URL上的加密字符串或cookie中的加密值来完成。您也可以使用到期日期/时间值进行加密。
湾(来自Forms Auth)使用该用户ID创建表单身份验证故障单。运行您拥有的任何其他登录逻辑。完成。
外部网站 - 无需更改。让用户按原样登录。