gpt4 book ai didi

c# - IIS 混合匿名和 Windows 身份验证

转载 作者:太空狗 更新时间:2023-10-29 21:49:16 25 4
gpt4 key购买 nike

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

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

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

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

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

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

这对我来说就像一个陷阱

谢谢。

最佳答案

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

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

内部网站

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

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

(从 Forms Auth 发言)使用该用户 ID 创建一个 Forms 身份验证票证。运行您拥有的任何其他登录逻辑。完成。

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

关于c# - IIS 混合匿名和 Windows 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34963618/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com