如果这个问题偏离了主题,我深感抱歉;我正在尝试解决一些超出我专业领域的问题。
我最近将一个面向内部的 Web 应用程序迁移到 IIS。我还启用了以前没有使用的 Windows 身份验证 (IWA)。我发现的问题是,我的用户帐户(显然只有我的用户帐户)有时(并非总是)被身份验证过程错误识别。
以下是我的网站的 IIS 身份验证设置的详细信息:
- 我已启用 Windows 身份验证并禁用其他所有内容(包括匿名身份验证)。
- Windows 身份验证使用内核模式身份验证和
Negotiate
提供程序。
关于我提到的错误识别:
- 我在同一个 AD 域中有两个用户帐户。分别称为
acct1
和acct2
。我通常以 身份登录,在需要提升权限时acct1
切换到。acct2
- 我登录到运行 IIS 的 VM
acct2
来设置站点。 - 当我返回本地电脑访问该网站时,该网站将我识别为
acct2
,尽管我以 的身份登录到我的电脑acct1
。 - 访问过该网站的其他人都已被正确识别,甚至包括像我一样拥有多个帐户的人。
- 如果我以 身份登录并从另一台 PC 访问该网站
acct1
,则该网站会正确识别我为acct1
。 - 反常的是,如果我从服务器机器本身访问该网站,我以 的身份登录
acct2
,它会将我识别为acct1
。 - 不管怎样,
acct2
我在本地电脑上具有管理员权限,但在访问该网站的其他电脑上却没有。 - 这种情况已经持续了一周多,即使重启本地电脑后问题仍然存在。不同的浏览器也会出现这种情况。
如果我将 IWA 提供程序从 切换Negotiate
到NTLM
,那么我会看到以下内容:
acct1
当我从本地电脑访问该网站时,我就能正确识别。- 当我从 Web 服务器计算机访问网站时,系统提示我输入凭据。但是,它不接受
acct1
或 的凭据acct2
。
我不太关心从服务器访问网站,但我从 PC 访问网站时需要正确识别身份。我想使用Negotiate
而不是NTLM
。
我是一名开发人员,而不是系统管理员,但我正在尝试寻找任何线索,以帮助我缩小问题范围,并可能为我们的基础设施团队指明正确的方向。这听起来像是 Active Directory 配置或 Kerberos 问题吗?
该网站是一个 Python Flask 应用程序,通过 Python 库在 IIS 中作为 FastCGI 应用程序运行wfastcgi
。该网站读取请求变量的值REMOTE_USER
以获取 IWA 身份验证过程的结果。
感谢@massimo 的提示,@grawity 对此进行了扩展,我找到了答案。原来这是一个与存储在 Windows 凭据管理器中的凭据相关的简单问题。
我曾假设 Kerberos 身份验证过程将始终使用来自我活动的 Windows 登录的凭据,我以 的身份登录
acct1
。但是,与托管我的网站的机箱相关的凭据存储在凭据管理器中(在 Windows 凭据下,而不是 Web 凭据,仅供参考),并且系统似乎在意识到该网站托管在该机箱上后以某种方式使用了这些凭据。(我的理解在这里仍然很模糊。)保存的凭据使用acct2
。无论如何,在删除已保存的凭据并重新启动我的电脑后,该网站就按照
acct1
我预期的那样识别了我。