跳到主内容

Kerberos/SPNEGO身份验证

Casdoor 支持 Kerberos/SPNEGO(集成 Windows 身份验证),可在企业环境中实现无缝单点登录,这些环境中的用户已针对 Kerberos 密钥分发中心(KDC)进行身份验证,通常为 Active Directory。 浏览器会透明地呈现SPNEGO令牌——用户无需输入凭据即可登录。

工作原理

  1. 浏览器向Casdoor端点/api/kerberos-login?application=<0>.
  2. 如果未提供Authorization: Negotiate标头,Casdoor将响应401 WWW-Authenticate: Negotiate
  3. 浏览器获取Kerberos服务票据,并将其作为SPNEGO令牌在Authorization: Negotiate<0>.
  4. Casdoor 使用组织的 keytab 验证令牌,并将 Kerberos 主体名称映射到 Casdoor 用户。
  5. 成功时,Casdoor 会正常登录用户并颁发授权码或会话。

配置

Kerberos设置按组织划分。 打开组织编辑页面并填写以下字段:

字段描述
Kerberos领域Kerberos领域名称,通常为大写域名(例如CORP.EXAMPLE.COM)。
Kerberos KDC主机密钥分发中心的主机名或IP地址(例如dc.corp.example.com)。
Kerberos keytab服务主体的Base64编码密钥表文件。
Kerberos服务名称服务主体前缀(默认:HTTP)。 完整的SPN是<0>/<1>@<2>.

生成密钥表

在Windows域控制器上,运行:

ktpass -princ HTTP/casdoor.corp.example.com@CORP.EXAMPLE.COM ^
-mapuser casdoor-svc@corp.example.com ^
-crypto AES256-SHA1 ^
-ptype KRB5_NT_PRINCIPAL ^
-pass * ^
-out casdoor.keytab

然后对文件进行Base64编码,并将结果粘贴到Kerberos密钥表中:

# Linux/macOS
base64 casdoor.keytab

用户匹配

在 SPNEGO 令牌通过验证后,Casdoor会在组织中查找一个用户,其kerberosName属性与 Kerberos 主体匹配(例如:alice@CORP.EXAMPLE.COM)。 如果未找到用户,则登录失败。 预先创建Casdoor用户,并设置其Kerberos主体名称以启用映射。

端点

GET /api/kerberos-login?application=<application-name>

将浏览器或您的反向代理指向此 URL,以针对指定应用程序启动 Kerberos 身份验证。

注意事项

Kerberos身份验证要求浏览器与Casdoor服务器位于同一Kerberos领域,且客户端计算机必须加入域。 跨域身份验证需要在Casdoor之外进行额外的KDC级别信任配置。