在 ALB 后面的 IIS 上使用 Windows 身份验证 (NTLM) 时防止出现多个 user/password 提示
Preventing multiple user/password prompts when using Windows authentication (NTLM) on IIS behind an ALB
我正在尝试在 IIS 10 服务器上(在 Windows Server 2019 上)为我的 asp.net 核心 2.2 应用 运行 设置 Windows 身份验证。但是,我不想使用集成或自动身份验证,该站点可从 public 互联网访问,因此我希望用户通过在 IIS 服务器上创建的固定用户帐户登录(需要 user/password 提示) .
到目前为止,我尝试的是设置网站,所有权限管理到位,网站是可调用的,调用网站时会显示一个弹出窗口,询问用户名和密码。
然而,当通过 public 域加载网站时,user/password 提示重复打开,即使提供了正确的凭据。
在查看开发人员控制台时,我可以看到资源是在不同的步骤中加载的,外部库是随后加载的,对于每次加载,用户都必须再次进行身份验证。
目标是让 user/password 提示仅显示一次,并让所有随后从已通过身份验证的网站加载资源。我也尝试使用另一个示例 .net 核心应用程序,效果很好。
我是一个C#新手,应用是同事写的。我注意到 _Layout.cshtml
中的一些指令:
<environment include="Development">
<script src="~/lib/popper.js/dist/umd/popper.min.js" asp-append-version="true" integrity="sha384-<hash>"></script>
</environment>
<environment exclude="Development">
<script src="~/lib/popper.js/dist/umd/popper.min.js" asp-append-version="true" integrity="sha384-<hash>"></script>
</environment>
还在页面末尾动态加载 Scripts
部分:
@RenderSection("Scripts", required: false)
会不会是动态加载脚本或者设置环境导致类库加载不同步,需要重新认证?
IIS 服务器在应用程序负载均衡器设置后面的 AWS 上运行,不同的路径指向 IIS 服务器上的不同网站。 public 域重定向到 ALB。用户调用包含子路径(例如 https://cloud.domain/path
)的 public 域,并被重定向到适当的网站。
非常感谢反馈,因为身份验证机制不像现在这样可行。当切换到基本身份验证时,一切正常,用户只经过一次身份验证,所有后续调用都是自动进行的。当然,基本认证不满足安全要求,所以应该使用windows认证。
经过一番研究,我发现 Windows 身份验证无法通过 https 工作,它需要一个 tcp 连接。
由于 AWS 上的 Application Load Balancer 仅允许 http 和 https,因此这种方法存在一些复杂性。但是,网络负载均衡器在 TCP 上运行,因此可以很好地与 Windows 身份验证配合使用。
以下是我找到的与该主题相关的一些参考资料:
对不起,HTTP 和 HTTPS 是 TCP 连接之上的协议,所以这不是问题。
可能是应用程序负载平衡器由于某种原因没有通过身份验证,因为它所做的不仅仅是“转发数据包”,而是与 TCP 连接的使用无关。
我正在尝试在 IIS 10 服务器上(在 Windows Server 2019 上)为我的 asp.net 核心 2.2 应用 运行 设置 Windows 身份验证。但是,我不想使用集成或自动身份验证,该站点可从 public 互联网访问,因此我希望用户通过在 IIS 服务器上创建的固定用户帐户登录(需要 user/password 提示) .
到目前为止,我尝试的是设置网站,所有权限管理到位,网站是可调用的,调用网站时会显示一个弹出窗口,询问用户名和密码。 然而,当通过 public 域加载网站时,user/password 提示重复打开,即使提供了正确的凭据。 在查看开发人员控制台时,我可以看到资源是在不同的步骤中加载的,外部库是随后加载的,对于每次加载,用户都必须再次进行身份验证。 目标是让 user/password 提示仅显示一次,并让所有随后从已通过身份验证的网站加载资源。我也尝试使用另一个示例 .net 核心应用程序,效果很好。
我是一个C#新手,应用是同事写的。我注意到 _Layout.cshtml
中的一些指令:
<environment include="Development">
<script src="~/lib/popper.js/dist/umd/popper.min.js" asp-append-version="true" integrity="sha384-<hash>"></script>
</environment>
<environment exclude="Development">
<script src="~/lib/popper.js/dist/umd/popper.min.js" asp-append-version="true" integrity="sha384-<hash>"></script>
</environment>
还在页面末尾动态加载 Scripts
部分:
@RenderSection("Scripts", required: false)
会不会是动态加载脚本或者设置环境导致类库加载不同步,需要重新认证?
IIS 服务器在应用程序负载均衡器设置后面的 AWS 上运行,不同的路径指向 IIS 服务器上的不同网站。 public 域重定向到 ALB。用户调用包含子路径(例如 https://cloud.domain/path
)的 public 域,并被重定向到适当的网站。
非常感谢反馈,因为身份验证机制不像现在这样可行。当切换到基本身份验证时,一切正常,用户只经过一次身份验证,所有后续调用都是自动进行的。当然,基本认证不满足安全要求,所以应该使用windows认证。
经过一番研究,我发现 Windows 身份验证无法通过 https 工作,它需要一个 tcp 连接。 由于 AWS 上的 Application Load Balancer 仅允许 http 和 https,因此这种方法存在一些复杂性。但是,网络负载均衡器在 TCP 上运行,因此可以很好地与 Windows 身份验证配合使用。
以下是我找到的与该主题相关的一些参考资料:
对不起,HTTP 和 HTTPS 是 TCP 连接之上的协议,所以这不是问题。
可能是应用程序负载平衡器由于某种原因没有通过身份验证,因为它所做的不仅仅是“转发数据包”,而是与 TCP 连接的使用无关。