我有一个 ASP.NET MVC 5 应用程序,它使用 Exchange Web Services Managed API 从本地 Exchange 查询数据,并在 Server 2012 R2 上的 IIS 8.5 中的 Intranet 站点主机上显示数据。我使用 Windows 身份验证来保护站点。
问题是移动设备(及其浏览器)在打开网站时没有收到登录提示,并立即收到 401 访问被拒绝错误(凭据无效)。
以下是可以工作的设备:
- 已加入域的 Windows 8 PC,装有 Opera/IE/Firefox(我的开发机器)
- 未加入域且使用 IE/Firefox 的 Windows 7 PC
- Windows Phone 8 模拟器(在开发机器上)
以下是无法工作的设备:
- 带有 Edge 的 Windows 10 手机
- 配备原装浏览器/Chrome/Firefox/Opera 的 Android 平板电脑
正常工作的设备会收到登录提示,无法正常工作的设备则不会。
来自 IIS 的配置:
- 内核模式已启用
- 应用程序池作为域帐户运行
- 在机器账户上设置 SPN(http/ & http/)
- applicationhost.config 中的 useAppPoolCredentials 设置为 false
- ASP.Net 模拟已关闭
- 匿名身份验证已关闭,Windows 身份验证已打开
- 提供者:Negotiate、NTLM(按特定顺序)
有人可以帮忙吗?
答案1
看来我的配置没问题。但事实证明,Windows 10 Mobile 上的 Edge 尚不支持 Windows 身份验证(哦,真讽刺),Android 平板电脑上的浏览器也不支持 Windows 身份验证。所以这对我来说几乎是一个过早的假设。我希望这仍然能对某些人有所帮助。
解决方案:测试更多设备,并确定您正在测试的浏览器是否可以使用 Windows 身份验证。专业提示:您可以使用 Sophos 或 TMG 等网关来解决此问题,因为您将看到一个通过 Windows 身份验证内部传递凭据的登录表单,因为 Kerberos 无法通过 WAN 工作(无法连接到 DC)。