首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >无法通过本地IIS进行windows身份验证

无法通过本地IIS进行windows身份验证
EN

Stack Overflow用户
提问于 2011-09-12 19:28:52
回答 9查看 94.4K关注 0票数 72

因此,我使用intranet模板创建了一个新的ASP.NET MVC项目。web.config包含适当的值(例如<authentication mode="windows"/>)。

如果我使用VS web服务器启动web应用程序,一切看起来都很好-页面显示了我的Windows域和用户名等等。然而,这在Opera和Safari以及IE和FF中都有效,它告诉我它根本没有使用Windows身份验证(因为据我所知,除了IE/FF之外,这不适用于任何浏览器)。

下一步是让它通过本地IIS工作。我创建了一个主机文件条目,将www.mysite.mydomain指向127.0.0.1。因此,在IIS中,我创建了一个绑定到www.mysite.mydomain网站,并启用Windows身份验证和禁用匿名身份验证。

我已经设置IE和FF来启用Windows身份验证,如下所示:

IE

  1. 将URL添加到intranet组
  2. 确保在高级设置

中启用了Windows身份验证

FF

将'www.mysite.mydomain‘放入网络中。自动-ntlm-auth.trusted-uris配置设置。

但是当我在IE / FF中拨打www.mysite.mydomain时,我得到一个登录提示。有趣的是,即使我在这里输入我的Windows登录,它仍然失败,并再次显示登录提示。

我们这里没有active directory,但我的理解是,它应该可以与本地帐户一起工作。

我想不出我还需要做什么。有什么建议吗?

编辑:我们最近切换到使用Active Directory,问题仍然存在。

编辑:当我取消登录提示时,我被带到一个“IIS 7.5 Detailed Error”页面,其中包含以下信息:

HTTP错误401.2 -由于身份验证标头无效,您无权查看此页面。**

EN

回答 9

Stack Overflow用户

发布于 2012-10-23 02:31:21

您必须将主机文件中指定的域列入白名单,windows身份验证才能正常工作:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters

  • Right-click

  • 单击开始,单击运行,键入regedit,然后单击确定。

  • 在注册表编辑器中,找到以下注册表项:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters

  • Right-click参数,单击新建,然后单击DWORD (32位)值。

  • 键入DisableStrictNameChecking并按DisableStrictNameChecking注册表值并在值数据框中键入1,在注册表编辑器中单击OK

H114>,找到并单击以下注册表项:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0

  • Right-click

,指向新建,然后单击“多字符串值”。

  • 键入BackConnectionHostNames,然后按ENTER.

  • Right-click BackConnectionHostNames,然后单击“修改”。

  • 在“值数据”框中,键入本地计算机上站点的一个或多个主机名,然后单击“确定”。

  • 退出注册表编辑器,然后重新启动IISAdmin服务。

注意:此答案中的原始Microsoft知识库链接已断开并已被删除。This article提供了设置DisableStrictNameChecking的说明。

票数 146
EN

Stack Overflow用户

发布于 2012-10-27 04:17:25

最近,我花了三天的时间试图解决同样的问题,这让我抓狂。它发生在负载平衡设置上,其中一台服务器身份验证正确,而另一台服务器失败。调查问题-并最终解决它-发现它与负载平衡环境无关,当使用Windows身份验证进行身份验证时,任何服务器都可能发生这种情况,并且使用Active Directory可识别的名称以外的名称调用服务器

Kerberos 1.启用日志记录

要正确诊断问题,您需要在承载IIS站点的计算机上启用Kerberos日志记录。为此,请添加以下注册表项:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\Kerberos\Parameters

Add Registry Value LogLevel with ValueType REG_DWORD and value 0x1 (使用ValueTypeREG_DWORD和value0x1添加注册表值。

一旦打开日志记录,然后尝试进行身份验证,就会在Windows应用程序日志中记录错误。您可以忽略错误KDC_ERR_PREAUTH_REQUIRED (这只是握手的一部分),但是如果您得到错误KDC_ERR_C_PRINCIPAL_UNKNOWN,这意味着您的AD控制器无法识别您的服务器,因此您需要遵循以下步骤。

2. KDC_ERR_C_PRINCIPAL_UNKNOWN

如果你得到的是kerberos,这意味着名称“kerberos”与AD识别你的机器的方式不同,所以它无法提供有效的KDC_ERR_C_PRINCIPAL_UNKNOWN票证。在这种情况下,您需要在AD上为“'www.mysite.mydomain”注册一个服务主体名称(SPN)。

在您的AD控制器上,运行此命令-您将需要域管理员权限:

代码语言:javascript
复制
Setspn -A HTTP/mysite.mydomain YOUR_MACHINE_HOSTNAME

3.为应用程序池使用自定义标识

最后,使您的应用程序池使用属于Active Directory的自定义帐户,而不是使用NetworkService。这可以在应用程序池的高级设置中完成。

然后..。瞧。

注意:问题可能(不太可能)与将多个SPN注册到同一台计算机有关,在这种情况下,您将需要运行命令来删除重复的SPN,但我怀疑情况是否如此。还可以尝试向站点添加不同的绑定(不使用自定义名称),比如htttp://localhost: custom _port_number,看看身份验证是否有效。如果它起作用了,这是一个额外的迹象,表明您正在遭受与我相同的问题。

票数 8
EN

Stack Overflow用户

发布于 2011-09-13 03:06:39

你有没有试过把域名放在用户名前面?

代码语言:javascript
复制
DOMAIN\username

如果您没有域帐户,请尝试在您的用户名前加上计算机名:

代码语言:javascript
复制
MYCOMPUTER\myusername
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7387156

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档