private Realm kerberosProxyChallenge(Channel channel,
List<String> proxyAuth,
Request request,
ProxyServer proxyServer,
FluentCaseInsensitiveStringsMap headers,
NettyResponseFuture<?> future) throws NTLMEngineException {
Uri uri = request.getUri();
try {
String challengeHeader = SpnegoEngine.INSTANCE.generateToken(proxyServer.getHost());
headers.remove(HttpHeaders.Names.AUTHORIZATION);
headers.add(HttpHeaders.Names.AUTHORIZATION, "Negotiate " + challengeHeader);
return proxyServer.realmBuilder()
.setUri(uri)
.setMethodName(request.getMethod())
.setScheme(Realm.AuthScheme.KERBEROS)
.build();
} catch (Throwable throwable) {
String ntlmAuthenticate = getNTLM(proxyAuth);
if (ntlmAuthenticate != null) {
return ntlmProxyChallenge(ntlmAuthenticate, request, proxyServer, headers, future);
}
requestSender.abort(channel, future, throwable);
return null;
}
}