我已经在互联网上搜索了将近四天,但还是遇到了困难。
我创建了一个简单的 ASP MVC4 Intranet 网站,并将其部署到名为的服务器上:iis
。该计算机与我的计算机位于同一域中。
在我的域中我有 3 台计算机:my_pc
、iis
服务器和sql
服务器。
当我在电脑上输入地址时http://iis
,我看到我已正确登录:
这在 IE 和 Chrome 中有效。<- 到目前为止一切正常!
当我尝试在我的网页 - WebAPI 控制器内执行 SQL 查询时,问题就开始了。
在 IE 上我得到了正确的结果,但在 Chrome 上我得到了错误:
在 Web.config 中我有所需的配置:
<authentication mode="Windows" />
<identity impersonate="true" />
在 IIS 内部,我已禁用匿名身份验证并启用 Windows 身份验证。
我的 IIS 被信任将请求委托给我的 SQL 服务器。
最奇怪的是,当我尝试打开我的网页(使用 SQL 查询)时出现错误,然后当我在 IE 中打开同一个网页(成功)并刷新 Chrome 时,网站可以正确加载并运行一段时间(随机,有时是 5 分钟,有时是 30 秒)。
我尝试[Authorize]
向特定方法添加属性,但没有帮助。
看起来 Chrome 没有将 kerberos 令牌传递给 IIS。
我已尝试过这里描述的步骤:http://dev.chromium.org/developers/design-documents/http-authentication但没有任何运气。
有人可以逐步指导我如何配置 Google Chrome 和其他内容(如果需要,IIS、SQL)以在 Chrome 中使用 Windows 身份验证吗?
答案1
您的问题是您正在使用 Chromium 文档来解决 Chrome 问题。虽然相似,但它们是两种不同的浏览器。您需要通过将 IIS 可以委派的服务器列入白名单来启用委派。您在 Chrome 中执行此操作的方式与 Chromium 类似,但对于注册表项,您需要对 Chrome 使用 [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Chrome],而不是对 Chromium 使用 [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Chromium]。
当您阅读文档时,您会发现可以使用组策略、Chrome for Business 或命令行来启用委派,但在您的设置中,我假设您使用了注册表选项。我发现要设置的关键键是 AuthNegotiateDelegateWhitelist。将值设置为“*”即可开始。一旦您开始工作,通过将 * 更改为以逗号分隔的服务器列表(按 IP 地址或 DNS 名称),将其锁定到您想要的服务器。允许使用通配符。您可能还想查看 AuthServerWhiteList 键。