无法使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

  1. 将URL添加到Intranet组
  2. 确保在高级设置中启用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生效。

从上面的链接复制快速访问:

  1. 将DisableStrictNameCheckingregistry项设置为1.有关如何执行此操作的详细信息请参阅Microsoft知识库文章281308
  2. 单击开始,单击运行,键入regedit,然后单击确定。
  3. 在registry编辑器中find并单击以下registry项:HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Lsa \ MSV1_0
  4. 用鼠标右键单击MSV1_0,指向新build,然后再单击多string值。
  5. 键入BackConnectionHostNames,然后按ENTER键。
  6. 用鼠标右键单击BackConnectionHostNames,然后单击修改。
  7. 在数值数据框中,键入本地计算机上的站点的主机名或主机名,然后单击确定。
  8. 退出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"