无法使Windows身份validation通过本地IIS工作
所以我使用Intranet模板创build了一个新的ASP.NET MVC项目。 web.config包含适当的值(例如<authentication mode="windows"/>
)。
如果我使用VSnetworking服务器启动networking应用程序,这一切都看起来很好 – 页面显示我的Windows域和用户名和所有。 然而,这在Opera和Safari以及IE和FF,这对我说,它根本不使用Windows身份validation(因为据我所知,这不适用于除IE / FF之外的任何浏览器)。
下一步是让它通过本地IIS工作。 我创build一个指向www.mysite.mydomain为127.0.0.1的hosts文件条目。 因此,在IIS中,我创build了一个绑定到www.mysite.mydomain的网站,并启用Windows身份validation并禁用匿名身份validation。
我已经设置IE和FF来启用Windows身份validation,如下所示:
IE
- 将URL添加到Intranet组
- 确保在高级设置中启用Windows身份validation
FF
将“www.mysite.mydomain”放入network.automatic-ntlm-auth.trusted-urisconfiguration设置中。
但是,当我在IE / FF拨号www.mysite.mydomain我得到一个login提示。 有趣的是,即使我在这里键入我的Windowslogin,它仍然失败,并再次显示我的login提示。
我们这里没有活动目录,但我的理解是,它应该适用于本地帐户。
我不能想到我需要做的任何事情。 有什么build议么?
编辑:我们最近切换到使用Active Directory,问题依然存在。
编辑:当我取消login提示,我被带到一个'IIS 7.5详细错误'页面与以下信息:
HTTP错误401.2 – 未经授权您无权查看此页面,因为validation标头无效。**
您必须将hosts文件中指定的域列入白名单才能使Windows身份validation生效。
从上面的链接复制快速访问:
- 将DisableStrictNameCheckingregistry项设置为1.有关如何执行此操作的详细信息请参阅Microsoft知识库文章281308
- 单击开始,单击运行,键入regedit,然后单击确定。
- 在registry编辑器中find并单击以下registry项:HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Lsa \ MSV1_0
- 用鼠标右键单击MSV1_0,指向新build,然后再单击多string值。
- 键入BackConnectionHostNames,然后按ENTER键。
- 用鼠标右键单击BackConnectionHostNames,然后单击修改。
- 在数值数据框中,键入本地计算机上的站点的主机名或主机名,然后单击确定。
- 退出registry编辑器,然后重新启动IISAdmin服务。
你有没有尝试把域名放在用户名前面?
DOMAIN\username
如果您没有域帐户,请尝试在您的用户名前加上机器名称:
MYCOMPUTER\myusername
您应该检查是否已安装/启用Windows身份validation。 这听起来很奇怪,但在IIS 7中,您必须安装并启用各种身份validation方法。 查看http://support.microsoft.com/kb/942043/了解更多信息,请参阅下面的引用部分。;
原因1
Web应用程序被configuration为使用集成Windows身份validation。 但是,Windows身份validationfunction未打开。 或者,ApplicationHost.config文件或Web.config文件的集成Windows身份validation本机模块部分无效。 要解决此问题,请参阅解决scheme1。
原版的
通常,当您尝试查看托pipe在IIS上的asp.net网页并收到login提示时,并不意味着您的凭据没有收到,或者您没有通过身份validation。 这意味着您的网站运行的帐户没有适当的权限来处理文件。
在IIS 6和7中,您可以轻松更改您的应用程序池在其下运行的用户帐户。 尝试将应用程序池标识更改为专门为此devise的更多访问权限的帐户。 或者如果你想坚持现有的帐户(IUSR_?networking服务?),您可以授予该帐户在您的网站存储目录的更多权限。
本文专门针对BizTalk,但几乎没有对它的引用,并专注于解决IIS和应用程序池的权限问题: http : //msdn.microsoft.com/en-us/library/aa954062.aspx
我最近花了三天的时间试图解决同样的问题,这让我疯狂。 这发生在负载平衡的设置上,其中一台服务器正确地进行了身份validation,另一台则失败了。 调查问题 – 最终解决问题 – 事实certificate与负载均衡环境无关,使用Windows身份validation进行身份validation时,任何服务器都可能发生此问题,并且使用除Active Directory所识别的名称之外的名称调用服务器
1.启用Kerberos日志logging
要正确地诊断您的问题,您需要启用托pipeIIS站点的计算机上的Kerberos日志logging。 为此,请添加以下registry项:
HKEY_LOCAL_MACHINE \系统\ CurrentControlSet \控制\ LSA \ Kerberos的\参数
使用ValueType REG_DWORD和值0x1添加registry值LogLevel 。
一旦你打开日志logging,然后你尝试进行身份validation,你会得到logging在你的Windows应用程序日志中的错误。 您可以忽略错误KDC_ERR_PREAUTH_REQUIRED (这只是握手的一部分),但是如果出现错误KDC_ERR_C_PRINCIPAL_UNKNOWN ,这意味着您的AD控制器无法识别您的服务器,因此您需要执行以下步骤。
2. KDC_ERR_C_PRINCIPAL_UNKNOWN
如果您获取KDC_ERR_C_PRINCIPAL_UNKNOWN,则表示名称“mysite.mydomain.com”与AD识别您的计算机的方式不同,因此无法提供有效的kerberos票据。 在这种情况下,您需要在AD上注册“www.mysite.mydomain”的服务主体名称(SPN)。
在您的AD控制器上运行此命令 – 您将需要域pipe理员权限:
Setspn -A HTTP/mysite.mydomain YOUR_MACHINE_HOSTNAME
3.为您的应用程序池使用自定义标识
最后,使应用程序池使用属于Active Directory的自定义帐户,而不是使用NetworkService。 这可以在应用程序池的高级设置中完成。
和..瞧。
注:问题可能(不太可能)与多个SPN注册到同一台计算机相关,在这种情况下,您将需要运行一个命令来删除重复的SPN,但我怀疑是这种情况。 也尝试添加一个不同的绑定到您的网站(不使用自定义名称),如htttp:// localhost:custom_port_number,并查看身份validation是否工作。 如果有效,这是一个额外的迹象表明你正在遭受同样的问题。
为什么本地IIS? 你可以使用本地的IIS Express吗?
如果是的话,试试这个。 看来默认情况下,IIS Express的Windows身份validation设置为false。
更改
<windowsAuthentication enabled="false">
在applicationhost.config文件(在“C:\ Users [Profile] \ Documents \ IISExpress \ config”文件夹下)为“true”。 这对我有用。
为了确保IIS使用Windows身份validation,我认为你应该尝试转向其他的authtentication方法。 如果启用匿名身份validation,则Windows身份validation将不起作用。 您还可以阅读详细描述IE和IIS要求的Microsoft支持文章 。
当我启用Windows身份validation时,出现此错误。 我想授权用户基于Windowslogin和我的应用程序中没有login页面。
我通过在我的Web config
文件中添加以下内容来修复错误。 在标签system.web
,我将authentication mode="None"
改为authentication mode="Forms"
。
在标签appSettings
,我添加了add key="owin:AutomaticAppStartup" value="false"