Many developers and IT professionals encounter a puzzling problem when accessing Kerberos-protected web resources: the authentication works flawlessly with curl, but fails outright when using Google Chrome. This inconsistent behavior can be frustrating, especially in environments where Single Sign-On (SSO) and secure access are essential for productivity and security.
TL;DR: If Kerberos login works in curl but not in Chrome, the issue usually lies in browser configuration, missing ticket forwarding, or cross-origin limitations. Ensure Chrome is enabled for Negotiate authentication, your system Kerberos tickets are valid, and the site is added to the appropriate authentication policies. This guide provides step-by-step solutions to fix common configuration and compatibility issues.
Kerberos is a secure authentication protocol widely adopted in enterprise environments. Tools like curl are often configured for programmatic access and can be easily adjusted to use Kerberos tickets. Browsers, on the other hand, impose additional restrictions and may not automatically send the Kerberos token unless explicitly set up to do so.
That’s why a resource protected by Kerberos might be accessible via a terminal command:
curl --negotiate -u : https://protected.example.com …but the same URL fails or prompts for password in Chrome. The browser might not be authorized to send Kerberos tokens due to missing configuration or domain policy issues.
Before diving into Chrome configuration, make sure that Kerberos is functional on the workstation itself.
klistIf these steps succeed, then Kerberos is correctly set up at the OS level. The problem is likely within Chrome settings.
Google Chrome (and Chromium-based browsers) can support Kerberos, but only if certain flags and system policies are in place.
Follow these steps:
chrome://flagsThen, use the Enterprise Policy option to explicitly define URLs for which Kerberos authentication should be applied.
For Windows:
gpedit.msc)*.example.comAlternatively, these can be configured via Windows Registry or JSON if using Linux or Mac:
{
"AuthServerWhitelist": "*.example.com",
"AuthNegotiateDelegateWhitelist": "*.example.com"
}
Kerberos requires accurate time synchronization. Even a few minutes of time drift between the client and the server can result in authentication failure.
To ensure system clock consistency:
ntpdate or w32tm /resync depending on your OSThe browser resolves the SPN (Service Principal Name) based on DNS. If there’s a mismatch between hostname and Kerberos principal, authentication will fail.
setspn -L HOSTNAMEKerberos authentication usually requires secure connections. Always use HTTPS to avoid challenges in the browser negotiating authentication protocols.
Also, be sure the server is responding on the default ports (like 443 for HTTPS) unless the browser is explicitly told to send credentials to non-default ports via policy.
If Chrome continues to refuse Kerberos authentication even after these configurations, it’s helpful to test in other browsers like Microsoft Edge or Firefox. Note that Firefox uses its own configuration files for SSO.
In Firefox:
about:config
network.negotiate-auth.trusted-uris = example.com
Open Chrome DevTools (F12), go to the Network tab, and observe the request to the protected resource.
WWW-Authenticate: Negotiate is returnedWWW-Authenticate: Negotiate. If Chrome sends an Authorization header with “Negotiate”, it’s trying Kerberos. krb5.conf and correct keytab or token availability, plus modifying Chrome’s policy files. When properly configured, Chrome can serve as a seamless tool for enterprise web authentication. All it takes is a series of correct policies, system readiness, and synchronizations. Following this guide will help eliminate most Kerberos-related browser authentication problems.