我能够在 Mac + Windows 上成功
kinit + klist
验证票据。我什至将我的 Kerberos 配置转移到“KerberosForWindows”。
Windows 上似乎没有任何浏览器可以执行 Kerberos 风格的 Negotiate,而不是 Windows 风格的 NTLM。是这样吗?
我已经尝试了所有本地站点/内联网/受信任域/浏览器配置传播域进行协商身份验证。我只是想确认 Windows 浏览器是否可以进行 GSSAPI 风格的 Negotiate。
// Kerberos authentication middleware
async function kerberosAuth(req, res, next) {
// Check for the Authorization header and extract the token
const authHeader = req.headers['authorization'];
if (!authHeader || !authHeader.startsWith('Negotiate ')) {
res.setHeader('WWW-Authenticate', 'Negotiate');
return res.status(401).send('Kerberos authentication required');
}
const token = authHeader.slice('Negotiate '.length);
// Base64 decode the token
const decodedToken = Buffer.from(token, 'base64');
// Check if it's NTLM
if (decodedToken.toString('hex').startsWith('4e544c4d')) {
// always hit on Windows
return res.status(500).send('NTLM is not supported. Please use Kerberos authentication.');
} else {
// only ever hit on Mac/Linux
}
所有流行的浏览器都通过 HTTP 支持 Kerberos/SPNEGO
Negotiate
,但 MIT“Kerberos for Windows”软件包仅受 Mozilla/Firefox 支持 – 其他浏览器(IE 和 Chrome/Edge)仅支持 Windows 内置 SSPI 接口(这也是 Firefox 中的默认设置)。