Kerberos/SPNEGO身份验证
Casdoor 支持 Kerberos/SPNEGO(集成 Windows 身份验证),可在企业环境中实现无缝单点登录,这些环境中的用户已针对 Kerberos 密钥分发中心(KDC)进行身份验证,通常为 Active Directory。 浏览器会透明地呈现SPNEGO令牌——用户无需输入凭据即可登录。
工作原理
- 浏览器向Casdoor端点
/api/kerberos-login?application=<0>. - 如果未提供
Authorization: Negotiate标头,Casdoor将响应401 WWW-Authenticate: Negotiate。 - 浏览器获取Kerberos服务票据,并将其作为SPNEGO令牌在
Authorization: Negotiate<0>. - Casdoor 使用组织的 keytab 验证令牌,并将 Kerberos 主体名称映射到 Casdoor 用户。
- 成功时,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级别信任配置。