首页 > 解决方案 > 为什么“服务器上的 IIS”的行为与“本地 IIS”和“IIS Express”的行为不同?(ASP.NET Core + Angular + Windows 身份验证)

问题描述

如果我创建一个ASP.NET Core + Angular项目并启用 Windows 身份验证(按照这些说明链接)并使用IIS Expressrunas /user:MY-PC\local-user Chrome.exe对其进行调试,如果我使用不在 AD 中的本地用户 () 打开浏览器,为什么 Angular 应用程序会加载? IIS Express 不应该要求我提供凭据吗?

如果我使用 Web Deploy 发布到本地 IIS(启用了 Windows 身份验证并安装了 Windows 托管捆绑包),我会得到相同的结果,Angular 应用程序会加载并且本地 IIS 不会要求提供凭据。我尝试使用ASP.NET Core API + Angular拆分项目,但得到了相同的结果。我必须用一些逻辑实现一个端点,以返回 401(不是网络用户)、403(网络用户但不在我的 AD 组中)和 Angular 中的 Guard,以避免加载组件以及 401 和 403 页面。

但是,当我确实发布到服务器上的IIS时(手动创建网站并复制文件,并安装 Windows Hosting Bundle),我意识到行为有所不同,Angular 应用程序未加载并且 IIS 总是要求提供凭据。如果我输入了错误的凭据或单击取消,IIS 将显示 401。使用正确的凭据我可以访问并且浏览器会记住它们,但是如果我关闭并再次打开浏览器,我需要重新输入我的凭据,这有点恼人的。

当我打开普通浏览器(使用我的 AD 帐户)时,IIS Express 和本地 IIS 从不要求我提供凭据。

为什么“服务器上的 IIS”的行为与“本地 IIS”和“IIS Express”的行为不同?

标签: apiasp.net-coreauthenticationiis

解决方案


推荐阅读