docker - 针对 ASP.NET Core 5 Docker API 的 VueJS Windows 身份验证未出现
问题描述
设置:
我们已经在我们的 Windows 虚拟机(本地)上设置了为我们的 ASP.NET Core 5 API 运行 docker(Windows 容器)+ gMSA / 服务帐户 - 在 Kestrel 上内部运行.AddAuthentication(NegotiateDefaults.AuthenticationScheme).AddNegotiate();
(非 IIS)。它对配置的服务帐户进行身份验证,例如针对 MSSQL 或文件服务器。如果我打开任何受保护的端点,它使用我的 Windows 凭据或询问我(如果不在加入域的计算机上)。用户测试端点返回 windows 用户声明。
这只是工作正常的 API!
问题: “问题”是,我们的 VueJS 应用程序在 linux 主机上的 docker 容器(linux 容器)中运行 - 内部通过 nginx 托管。同一个网络。第一次打开 UI 后(没有打开 API)没有发生身份验证请求。有趣的部分是:第一次打开 API 并输入 Windows 凭据然后打开 UI 工作并显示使用/声明(我们从后端返回)。
在前端,我们使用 axios 和withCredentials: true
.
问题: 必须做什么才能使 UI 协商 Windows 登录?
解决方案
将请求传递到容器的反向代理必须启用 NTLM 支持,Windows 身份验证才能正常工作。IIS 默认支持这个,但是对于其他的,你需要手动激活它。这必须沿着代理链重复。
从文档:
凭据可以在连接上的请求之间保持不变。协商身份验证不得与代理一起使用,除非代理与 Kestrel 保持 1:1 连接亲和性(持久连接)。
请参阅您的反向代理的文档:
推荐阅读
- java - 有没有更好的方法来定期更新 UI
- android - 如何用 mockk 模拟密封类?
- xslt - 如何使用变量遍历节点并跳过具有相同值的重复节点
- cluster-computing - SLURM - 我如何确定作业正在使用哪些特定 CPU?
- c++ - 制作文本文件,逐个字符串输入
- c# - 将pdf转换为jpeg时出现PDFClown解析错误
- c# - 如何创建一个事件代表队列,以便您稍后提出它们?
- spring-security - 是否有一种技术可以延迟会话创建,直到用户成功登录?
- ionic-framework - Ionic InAppBrowser 和路由
- java - 改造调用入队未达到 onResponse 或 onFailure