首页 > 解决方案 > Gss 失败 - Docker 中的 Dotnet 5 和 Windows Auth

问题描述

我在 dotnet 5 项目中使用 Windows 身份验证苦苦挣扎了几天,无法让它在 Docker 环境中工作。在 Windows 系统上本地运行时,它可以正常工作。我发现了其他主题,可能是重复的,但它们与 .net core 3.1 相关,而不是 dotnet 5。

在控制器中执行需要 Windows 身份验证的方法的结果: 结果

我遵循了官方文档: https ://docs.microsoft.com/en-us/aspnet/core/security/authentication/windowsauth?view=aspnetcore-5.0&tabs=visual-studio#kestrel

让我解释一下,到目前为止我做了什么。首先在 dotnet 项目中:

除了 dotnet 代码

列表

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。请您指导我,如何做到这一点?

感谢您的任何帮助和提示。

标签: docker.net-corekerberoswindows-authentication

解决方案


推荐阅读