You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dotnet 5项目Docker环境下Windows认证出现Gss Failure报错如何解决

.NET 5 Windows Authentication Docker 环境异常解决方案

问题说明

开发.NET 5项目的Windows Authentication功能时,本地Windows环境运行正常,部署到Docker环境后无法通过认证,现有公开解决方案均适配.NET Core 3.1,不兼容.NET 5版本。

解决步骤

1. 修复GSSAPI不支持机制报错

该报错是因为生成keytab时使用的RC4-HMAC加密算法已被多数企业域环境和.NET 5 Negotiate组件默认禁用,按以下步骤调整:

  • 优先使用AES系列加密算法重新生成keytab,执行命令:
ktutil
ktutil: add_entry -password -p myUserName@MY.COMPANY.LOCAL -k 1 -e aes256-cts-hmac-sha1-96
ktutil: add_entry -password -p myUserName@MY.COMPANY.LOCAL -k 1 -e aes128-cts-hmac-sha1-96
# 按提示输入对应用户的域账号密码
ktutil: write_kt /etc/krb5.keytab
ktutil: exit
  • 在krb5.conf的[libdefaults]节点添加加密类型兼容配置:
[libdefaults]
default_realm = MY.COMPANY.LOCAL
default_tkt_enctypes = aes256-cts-hmac-sha1-96 aes128-cts-hmac-sha1-96 rc4-hmac
default_tgs_enctypes = aes256-cts-hmac-sha1-96 aes128-cts-hmac-sha1-96 rc4-hmac
permitted_enctypes = aes256-cts-hmac-sha1-96 aes128-cts-hmac-sha1-96 rc4-hmac
dns_lookup_kdc = true
dns_lookup_realm = true
  • 删除启动脚本中手动执行kinit的逻辑,Negotiate组件会自动从/etc/krb5.keytab读取认证信息,手动生成的票据会出现权限不匹配问题,修改后的run.sh内容:
dotnet MyApi.dll

2. SPN参数填写说明

官方文档中setspn -S HTTP/myservername.mydomain.com myuser命令里的myservername.mydomain.com是外部用户访问你API服务时使用的完整域名/主机名:

  • 如果你对外暴露的服务地址是http://myapi.company.local,就填写myapi.company.local
  • 如果用户直接通过IP地址访问服务,就填写对应的IP地址
  • 该命令需要域管理员权限执行,执行完成后需等待域内同步生效,通常不超过15分钟。

3. 基础环境检查

  • 确认你的Docker运行时基础镜像已安装Kerberos和GSS相关依赖:
    • Debian/Ubuntu系镜像执行安装命令:apt install -y gss-ntlmssp krb5-user libgssapi-krb5-2
    • RHEL/CentOS系镜像执行安装命令:yum install -y krb5-workstation gssntlmssp
  • 确认运行Docker容器的宿主机DNS配置指向公司域控服务器,容器可正常解析域控地址。
  • 确认你项目中已开启Authentication中间件,Configure方法中存在app.UseAuthentication()代码,且顺序在app.UseAuthorization()之前。

内容的提问来源于stack exchange,提问作者Mozartos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 00:27:04