Use Proxy-Authorization instead of Authorization for proxy authentication
Motivation: When authenticating with a proxy server, HttpProxyHandler should use the 'Proxy-Authorization' header rather than the 'Authorization' header. Modifications: - Use 'Proxy-Authorization' header Result: Can connect to an HTTP proxy server
This commit is contained in:
parent
d7f5353fe8
commit
22c8ee7d16
@ -68,7 +68,7 @@ public final class HttpProxyHandler extends ProxyHandler {
|
|||||||
ByteBuf authz = Unpooled.copiedBuffer(username + ':' + password, CharsetUtil.UTF_8);
|
ByteBuf authz = Unpooled.copiedBuffer(username + ':' + password, CharsetUtil.UTF_8);
|
||||||
ByteBuf authzBase64 = Base64.encode(authz, false);
|
ByteBuf authzBase64 = Base64.encode(authz, false);
|
||||||
|
|
||||||
authorization = new AsciiString(authzBase64.toString(CharsetUtil.US_ASCII));
|
authorization = new AsciiString("Basic " + authzBase64.toString(CharsetUtil.US_ASCII));
|
||||||
|
|
||||||
authz.release();
|
authz.release();
|
||||||
authzBase64.release();
|
authzBase64.release();
|
||||||
@ -131,7 +131,7 @@ public final class HttpProxyHandler extends ProxyHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (authorization != null) {
|
if (authorization != null) {
|
||||||
req.headers().set(HttpHeaderNames.AUTHORIZATION, authorization);
|
req.headers().set(HttpHeaderNames.PROXY_AUTHORIZATION, authorization);
|
||||||
}
|
}
|
||||||
|
|
||||||
return req;
|
return req;
|
||||||
|
@ -35,6 +35,7 @@ import io.netty.handler.codec.http.HttpResponseStatus;
|
|||||||
import io.netty.handler.codec.http.HttpServerCodec;
|
import io.netty.handler.codec.http.HttpServerCodec;
|
||||||
import io.netty.handler.codec.http.HttpVersion;
|
import io.netty.handler.codec.http.HttpVersion;
|
||||||
import io.netty.util.CharsetUtil;
|
import io.netty.util.CharsetUtil;
|
||||||
|
import io.netty.util.internal.StringUtil;
|
||||||
|
|
||||||
import java.net.InetSocketAddress;
|
import java.net.InetSocketAddress;
|
||||||
import java.net.SocketAddress;
|
import java.net.SocketAddress;
|
||||||
@ -86,15 +87,18 @@ final class HttpProxyServer extends ProxyServer {
|
|||||||
|
|
||||||
boolean authzSuccess = false;
|
boolean authzSuccess = false;
|
||||||
if (username != null) {
|
if (username != null) {
|
||||||
CharSequence authz = req.headers().get(HttpHeaderNames.AUTHORIZATION);
|
CharSequence authz = req.headers().get(HttpHeaderNames.PROXY_AUTHORIZATION);
|
||||||
if (authz != null) {
|
if (authz != null) {
|
||||||
ByteBuf authzBuf64 = Unpooled.copiedBuffer(authz, CharsetUtil.US_ASCII);
|
String[] authzParts = StringUtil.split(authz.toString(), ' ', 2);
|
||||||
|
ByteBuf authzBuf64 = Unpooled.copiedBuffer(authzParts[1], CharsetUtil.US_ASCII);
|
||||||
ByteBuf authzBuf = Base64.decode(authzBuf64);
|
ByteBuf authzBuf = Base64.decode(authzBuf64);
|
||||||
authz = authzBuf.toString(CharsetUtil.US_ASCII);
|
|
||||||
|
String expectedAuthz = username + ':' + password;
|
||||||
|
authzSuccess = "Basic".equals(authzParts[0]) &&
|
||||||
|
expectedAuthz.equals(authzBuf.toString(CharsetUtil.US_ASCII));
|
||||||
|
|
||||||
authzBuf64.release();
|
authzBuf64.release();
|
||||||
authzBuf.release();
|
authzBuf.release();
|
||||||
String expectedAuthz = username + ':' + password;
|
|
||||||
authzSuccess = expectedAuthz.equals(authz);
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
authzSuccess = true;
|
authzSuccess = true;
|
||||||
|
Loading…
Reference in New Issue
Block a user