3

是否可以在没有在 IIS 中启用 Windows 身份验证的情况下获取用户的 Windows 凭据(即用户名)?禁用 Windows 身份验证后,以下代码将返回 NT AUTHORITY 或 IIS APPPOOL\ASP.NET v4.0,具体取决于是否启用了模拟和匿名身份验证。

System.Security.Principal.WindowsIdentity.GetCurrent().Name.ToString();

我正在将使用表单身份验证的 asp.net Web 应用程序转换为自定义身份验证。基本上,如果用户从网络外部连接,我会强制进行凭据检查,而如果他们从网络内部连接,我希望能够获取他们的 Windows 用户名。当我打开 Windows 身份验证时,内部部分可以工作,但在网络外部进行测试时会弹出登录框。我要么需要为非本地连接禁用 windows 身份验证,要么弄清楚如何在禁用 windows 身份验证的情况下获取 windows 用户名。有什么建议么?(我想到的另一种选择是将应用程序一分为二,并为每个应用程序设置单独的身份验证模式,但我想避免这种情况)。

- 我也试过:

System.Web.HttpContext.Current.User.Identity.ToString();
System.Threading.Thread.CurrentPrincipal.ToString();
4

2 回答 2

1

简单的答案是否定的。

最好的解决方案是创建 2 个站点。一种用于用户 windows 身份验证的内部用户,一种用于用户形成身份验证但针对 AD 进行身份验证的外部用户。您可以让用户始终默认访问外部站点,然后根据他们的 IP 进行重定向。也就是将内网用户重定向到内部用户。

于 2013-02-22T18:53:22.957 回答
1

使用 Active Directory 联合服务,这样的事情实际上(有点)是可能。如果是来自网络内部的 Windows 用户,他们可以配置为使用他们的帐户详细信息。对于外部用户,他们可以被重定向到需要他们登录的页面。

然而。这是非常繁重的任务,并且实施起来非常痛苦,并且实际上仅适用于有资源使用这种解决方案的企业解决方案。否则,我会说采用 2 站点方法。

于 2013-02-22T19:04:59.623 回答