docker - Gss 失败 - Docker 中的 Dotnet 5 和 Windows Auth
问题描述
我在 dotnet 5 项目中使用 Windows 身份验证苦苦挣扎了几天,无法让它在 Docker 环境中工作。在 Windows 系统上本地运行时,它可以正常工作。我发现了其他主题,可能是重复的,但它们与 .net core 3.1 相关,而不是 dotnet 5。
让我解释一下,到目前为止我做了什么。首先在 dotnet 项目中:
services.AddAuthentication(NegotiateDefaults.AuthenticationScheme).AddNegotiate();
- 以防万一我添加了一个没有
[Authorize]
属性的额外简单控制器,它在 Docker 中当然可以正常工作。实际上没有任何意义,但它只是让我确定它正在工作。
除了 dotnet 代码
- 我为我的公司域生成了 krb5.conf 文件并将其复制到 docker 映像中。它工作正常,因为我能够在 shell 中使用 kinit 并成功登录。不幸的是,我不能在这里分享这个文件。执行klist时看到有效票证
- 使用 ktutil生成的用户名.keytab 文件
ktutil
ktutil: add_entry -password -p myUserName@MY.COMPANY.LOCAL -k 1 -e RC4-HMAC
# ktutil prompts for a password
ktutil: write_kt myUserName.keytab
ktuilt: exit
- 码头工人文件
FROM company-custom-docker-image-with-dotnet-5 AS build
WORKDIR /app
COPY . ./
RUN dotnet publish -c Release -o out
FROM company-custom-docker-image-with-dotnet-runtime-5
WORKDIR /app
COPY --from=build /app/out .
COPY krb5.conf /etc/krb5.conf
COPY username.keytab .
COPY run.sh .
ENTRYPOINT ["/app/run.sh"]
run.sh 很简单:
echo "Starting kinit"
kinit username -k -t username.keytab
dotnet MyApi.dll
在具有[Authorize]属性的控制器中运行方法后的错误是:
Interop+NetSecurityNative+GssApiException:GSSAPI 操作失败并出现错误 - 未指定的 GSS 失败。次要代码可能会提供更多信息(Keytab FILE:/etc/krb5.keytab 不存在或为空)。
重命名 myUserName.keytab 并移至 /etc/krb5.keytab 后,我收到其他错误:
Interop+NetSecurityNative+GssApiException:GSSAPI 操作失败并出现错误 - 请求了不受支持的机制。
有一件事,我不明白,我应该做。
Microsoft.AspNetCore.Authentication.Negotiate 组件执行用户模式身份验证。服务主体名称 (SPN) 必须添加到运行服务的用户帐户,而不是计算机帐户。在管理命令 shell 中执行 setspn -S HTTP/myservername.mydomain.com myuser。
我不知道我必须把什么作为myservername。请您指导我,如何做到这一点?
感谢您的任何帮助和提示。
解决方案
推荐阅读
- python - 在 pycharm 终端中看不到数据框的样式
- ubuntu - 在 var/www/html 中导入我的网站,但没有显示任何内容
- python-3.x - 如何将表格从 rts 文件转换为 pandas DataFrame?
- apache-kafka - 我们可以控制 Kafka Connect 等待连接到 Kafka 的时间吗?
- python - 如何为单行和所有列绘制分布图
- json - 颤振冻结,未知/后备联合值
- web.xml - 在 web.xml 中将 cookie 设置为 false
- json - 从 JSON 数组数据创建响应式表单
- azure - 无法在 Azure 上的存储管理策略中添加新规则
- c++ - 如何使用 .so 文件中的地址值查找崩溃详细信息