我希望能够从ASP.NET代码中检测到IIS当前是否具有“Windows身份验证”“可用”?
从我安装的应用程序开始,当前正在“匿名访问”下运行,我想检测:
我希望这些信息让管理员知道他是否需要在 中实际尝试在我的应用程序上启用它之前在IIS 中执行操作。
(因此,例如,我认为IIS7: How to define that windows authentication is turned on?对我没有帮助,因为它正在查看它是否已经在我的应用程序中;我想知道是否已安装 /可以打开。)
我的“解决方案”需要在7之前的版本以及7本身之前工作(或者至少不会“失败”),所以如果存在差异,我需要知道。感谢。
答案 0 :(得分:4)
在默认的aspx页面上,检查用户是否设置为WindowsPrincipal类型。如果未启用Windows身份验证,则类型将不同。
对于Windows身份验证工作,应该为浏览器配置NTLM握手。
稍后会添加一些代码!
答案 1 :(得分:3)
我的回答是基于@Paul Stovell的最低要求(它只需要适用于IIS 7)。当WindowsAuthentication 安装时,applicationHost.config文件将在<globalModules>
部分中包含以下条目:
<add name="WindowsAuthenticationModule" image="%windir%\System32\inetsrv\authsspi.dll" />
使用可以在Microsoft.Web.Administration.dll
中找到的%windir%\System32\inetsrv\
,可以使用以下代码检查是否存在WindowsAuthenticationModule:
ConfigurationSection globalModulesConfig = config.GetSection("system.webServer/globalModules");
ConfigurationElementCollection globalModulesCollection = globalModulesConfig.GetCollection();
bool installed = globalModulesCollection.FirstOrDefault(a => a.GetAttribute("name").Value.Equals("WindowsAuthenticationModule")) != null;
由于applicationHost.config文件驻留在%windir%\System32\inetsrv\config
中,因此进行此查询的应用程序需要提升权限。
答案 2 :(得分:2)
启用Windows身份验证后,IIS将返回此HTTP标头作为响应:
WWW-Authenticate: NTLM
可以使用WebClient发送测试HTTP请求,等待它并检查标头是否存在。
答案 3 :(得分:1)
这不是一个答案,只是一个想法指出你可能的方向。
Web应用程序通常与自身隔离并以最小权限运行,因此我认为您无法从应用程序的ASP代码中看到这样的全局设置。
我猜你想要查看WMI类。您可以使用ADO或WMI对象查询它们。您可能需要冒充更高的凭据才能调用它。
看这篇文章 TechNet Article
答案 4 :(得分:1)
以下检查web.config / IIS设置我相信。您可以在每个实例化中添加更多检查,以查看配置部分是否定义等...
System.Configuration.Configuration config = WebConfigurationManager.OpenWebConfiguration("~");
SystemWebSectionGroup configSection = (SystemWebSectionGroup)config.GetSectionGroup("system.web");
AuthenticationSection auth = configSection.Authentication;
if (auth.Mode == AuthenticationMode.Forms) { }
else if (auth.Mode == AuthenticationMode.Windows) { }