Loading
Bug 1179722 - Pass the server certificate to the Negotiate auth module. a=diannaS
nsHttpNegotiateAuth never retrieved the server certificate, so nsAuthSSPI had nothing to build a channel binding token from and Negotiate authentication never sent one. Servers with Extended Protection set to Require reject that, which is why Kerberos SSO fails against ADFS and Exchange OWA where Chrome and Edge succeed. nsHttpNTLMAuth is the only caller that has ever supplied a certificate. GenerateCredentials runs on a background thread, so the certificate is collected on the main thread in GenerateCredentialsAsync, and only for a challenge that carries no token of its own. That is the first call of a sequence, and the only call where nsAuthSSPI::GetNextToken expects a certificate in place of the input token. Proxy auth is excluded because the channel's security info describes the origin server rather than the proxy. Extended Protection for proxies needs the proxy's own certificate and is left for a follow-up. network.auth.negotiate_channel_binding backs the change out. Original Revision: https://phabricator.services.mozilla.com/D316808 Differential Revision: https://phabricator.services.mozilla.com/D317837