You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by ol...@apache.org on 2017/12/05 14:41:23 UTC

httpcomponents-client git commit: AuthScope cleanup

Repository: httpcomponents-client
Updated Branches:
  refs/heads/master 4a55a8cfb -> cca56bebe


AuthScope cleanup


Project: http://git-wip-us.apache.org/repos/asf/httpcomponents-client/repo
Commit: http://git-wip-us.apache.org/repos/asf/httpcomponents-client/commit/cca56beb
Tree: http://git-wip-us.apache.org/repos/asf/httpcomponents-client/tree/cca56beb
Diff: http://git-wip-us.apache.org/repos/asf/httpcomponents-client/diff/cca56beb

Branch: refs/heads/master
Commit: cca56bebe943aef6706b20000c8173f3a662197b
Parents: 4a55a8c
Author: Oleg Kalnichevski <ol...@apache.org>
Authored: Tue Dec 5 15:16:05 2017 +0100
Committer: Oleg Kalnichevski <ol...@apache.org>
Committed: Tue Dec 5 15:16:05 2017 +0100

----------------------------------------------------------------------
 .../apache/hc/client5/http/fluent/Executor.java |  17 +-
 .../http/osgi/impl/OSGiCredentialsProvider.java |   2 +-
 .../osgi/impl/OSGiCredentialsProviderTest.java  |   6 +-
 .../AbstractHttpAsyncClientAuthentication.java  |   2 +-
 .../HttpAsyncClientCompatibilityTest.java       |   2 +-
 .../external/HttpClientCompatibilityTest.java   |   2 +-
 .../testing/sync/TestClientAuthentication.java  |   6 +-
 .../sync/TestClientAuthenticationFakeNTLM.java  |  10 +-
 .../client5/testing/sync/TestSPNegoScheme.java  |   4 +-
 .../apache/hc/client5/http/auth/AuthScope.java  | 245 +++++++------------
 .../hc/client5/http/impl/AuthSupport.java       |   3 +-
 .../http/impl/async/AsyncProtocolExec.java      |   2 +-
 .../auth/SystemDefaultCredentialsProvider.java  |   9 +-
 .../client5/http/impl/classic/ProtocolExec.java |   2 +-
 .../hc/client5/http/auth/TestAuthScope.java     | 122 ++++-----
 .../impl/auth/TestBasicCredentialsProvider.java |  46 ++--
 .../TestSystemDefaultCredentialsProvider.java   |   4 +-
 .../http/impl/classic/TestProtocolExec.java     |   2 +-
 18 files changed, 185 insertions(+), 301 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/httpcomponents-client/blob/cca56beb/httpclient5-fluent/src/main/java/org/apache/hc/client5/http/fluent/Executor.java
----------------------------------------------------------------------
diff --git a/httpclient5-fluent/src/main/java/org/apache/hc/client5/http/fluent/Executor.java b/httpclient5-fluent/src/main/java/org/apache/hc/client5/http/fluent/Executor.java
index ec5f50e..bf0e4a1 100644
--- a/httpclient5-fluent/src/main/java/org/apache/hc/client5/http/fluent/Executor.java
+++ b/httpclient5-fluent/src/main/java/org/apache/hc/client5/http/fluent/Executor.java
@@ -106,9 +106,7 @@ public class Executor {
     }
 
     public Executor auth(final HttpHost host, final Credentials creds) {
-        final AuthScope authScope = host != null ?
-                new AuthScope(host.getHostName(), host.getPort()) : AuthScope.ANY;
-        return auth(authScope, creds);
+        return auth(new AuthScope(host), creds);
     }
 
     /**
@@ -174,19 +172,6 @@ public class Executor {
         return authPreemptiveProxy(httpHost);
     }
 
-    public Executor auth(final Credentials cred) {
-        return auth(AuthScope.ANY, cred);
-    }
-
-    public Executor auth(final String username, final char[] password) {
-        return auth(new UsernamePasswordCredentials(username, password));
-    }
-
-    public Executor auth(final String username, final char[] password,
-            final String workstation, final String domain) {
-        return auth(new NTCredentials(username, password, workstation, domain));
-    }
-
     public Executor auth(final HttpHost host,
             final String username, final char[] password) {
         return auth(host, new UsernamePasswordCredentials(username, password));

http://git-wip-us.apache.org/repos/asf/httpcomponents-client/blob/cca56beb/httpclient5-osgi/src/main/java/org/apache/hc/client5/http/osgi/impl/OSGiCredentialsProvider.java
----------------------------------------------------------------------
diff --git a/httpclient5-osgi/src/main/java/org/apache/hc/client5/http/osgi/impl/OSGiCredentialsProvider.java b/httpclient5-osgi/src/main/java/org/apache/hc/client5/http/osgi/impl/OSGiCredentialsProvider.java
index 09ba676..dc9fc27 100644
--- a/httpclient5-osgi/src/main/java/org/apache/hc/client5/http/osgi/impl/OSGiCredentialsProvider.java
+++ b/httpclient5-osgi/src/main/java/org/apache/hc/client5/http/osgi/impl/OSGiCredentialsProvider.java
@@ -73,7 +73,7 @@ final class OSGiCredentialsProvider implements CredentialsStore {
         // iterate over all active proxy configurations at the moment of getting the credential
         for (final ProxyConfiguration config : proxyConfigurations) {
             if (config.isEnabled() && isSuitable(config, authScope)) {
-                final String scheme = authScope.getScheme();
+                final String scheme = authScope.getAuthScheme();
                 if (BASIC_SCHEME_NAME.equals(scheme)) {
                     return new UsernamePasswordCredentials(config.getUsername(), config.getPassword().toCharArray());
                 } else if (NTLM_SCHEME_NAME.equals(scheme)) {

http://git-wip-us.apache.org/repos/asf/httpcomponents-client/blob/cca56beb/httpclient5-osgi/src/test/java/org/apache/hc/client5/http/osgi/impl/OSGiCredentialsProviderTest.java
----------------------------------------------------------------------
diff --git a/httpclient5-osgi/src/test/java/org/apache/hc/client5/http/osgi/impl/OSGiCredentialsProviderTest.java b/httpclient5-osgi/src/test/java/org/apache/hc/client5/http/osgi/impl/OSGiCredentialsProviderTest.java
index 0c96539..43b7e0a 100644
--- a/httpclient5-osgi/src/test/java/org/apache/hc/client5/http/osgi/impl/OSGiCredentialsProviderTest.java
+++ b/httpclient5-osgi/src/test/java/org/apache/hc/client5/http/osgi/impl/OSGiCredentialsProviderTest.java
@@ -54,7 +54,7 @@ public class OSGiCredentialsProviderTest {
     @Test
     public void basicAuthentication() {
         final CredentialsProvider provider = credentialsProvider(proxy("user", "secret"));
-        final Credentials credentials = provider.getCredentials(new AuthScope(HOST, PORT, null, "BASIC"), HTTP_CONTEXT);
+        final Credentials credentials = provider.getCredentials(new AuthScope("http", HOST, PORT, null, "BASIC"), HTTP_CONTEXT);
         assertThat(credentials, instanceOf(UsernamePasswordCredentials.class));
         assertCredentials((UsernamePasswordCredentials) credentials, "user", "secret");
     }
@@ -62,7 +62,7 @@ public class OSGiCredentialsProviderTest {
     @Test
     public void ntlmAuthenticationWithoutDomain() {
         final CredentialsProvider provider = credentialsProvider(proxy("user", "secret"));
-        final Credentials credentials = provider.getCredentials(new AuthScope(HOST, PORT, null, "NTLM"), HTTP_CONTEXT);
+        final Credentials credentials = provider.getCredentials(new AuthScope("http", HOST, PORT, null, "NTLM"), HTTP_CONTEXT);
         assertThat(credentials, instanceOf(NTCredentials.class));
         assertCredentials((NTCredentials) credentials, "user", "secret", null);
     }
@@ -70,7 +70,7 @@ public class OSGiCredentialsProviderTest {
     @Test
     public void ntlmAuthenticationWithDomain() {
         final CredentialsProvider provider = credentialsProvider(proxy("DOMAIN\\user", "secret"));
-        final Credentials credentials = provider.getCredentials(new AuthScope(HOST, PORT, null, "NTLM"), HTTP_CONTEXT);
+        final Credentials credentials = provider.getCredentials(new AuthScope("http", HOST, PORT, null, "NTLM"), HTTP_CONTEXT);
         assertThat(credentials, instanceOf(NTCredentials.class));
         assertCredentials((NTCredentials) credentials, "user", "secret", "DOMAIN");
     }

http://git-wip-us.apache.org/repos/asf/httpcomponents-client/blob/cca56beb/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/async/AbstractHttpAsyncClientAuthentication.java
----------------------------------------------------------------------
diff --git a/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/async/AbstractHttpAsyncClientAuthentication.java b/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/async/AbstractHttpAsyncClientAuthentication.java
index 7dc8098..1e2aac4 100644
--- a/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/async/AbstractHttpAsyncClientAuthentication.java
+++ b/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/async/AbstractHttpAsyncClientAuthentication.java
@@ -338,7 +338,7 @@ public abstract class AbstractHttpAsyncClientAuthentication<T extends CloseableH
         final HttpHost target = start();
 
         final BasicCredentialsProvider credsProvider = new BasicCredentialsProvider();
-        credsProvider.setCredentials(AuthScope.ANY,
+        credsProvider.setCredentials(new AuthScope(null, null, -1, null ,null),
                 new UsernamePasswordCredentials("test", "test".toCharArray()));
         final HttpClientContext context = HttpClientContext.create();
         context.setCredentialsProvider(credsProvider);

http://git-wip-us.apache.org/repos/asf/httpcomponents-client/blob/cca56beb/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/external/HttpAsyncClientCompatibilityTest.java
----------------------------------------------------------------------
diff --git a/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/external/HttpAsyncClientCompatibilityTest.java b/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/external/HttpAsyncClientCompatibilityTest.java
index ea65327..a652857 100644
--- a/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/external/HttpAsyncClientCompatibilityTest.java
+++ b/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/external/HttpAsyncClientCompatibilityTest.java
@@ -214,7 +214,7 @@ public class HttpAsyncClientCompatibilityTest {
         {
             connManager.closeIdle(TimeValue.NEG_ONE_MILLISECONDS);
             credentialsProvider.setCredentials(
-                    new AuthScope("otherhost", AuthScope.ANY_PORT, "Restricted Files"),
+                    new AuthScope("http", "otherhost", -1, "Restricted Files", null),
                     new UsernamePasswordCredentials("testuser", "nopassword".toCharArray()));
             final HttpClientContext context = HttpClientContext.create();
             context.setCredentialsProvider(credentialsProvider);

http://git-wip-us.apache.org/repos/asf/httpcomponents-client/blob/cca56beb/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/external/HttpClientCompatibilityTest.java
----------------------------------------------------------------------
diff --git a/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/external/HttpClientCompatibilityTest.java b/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/external/HttpClientCompatibilityTest.java
index f8c9ccd..736f4d6 100644
--- a/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/external/HttpClientCompatibilityTest.java
+++ b/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/external/HttpClientCompatibilityTest.java
@@ -180,7 +180,7 @@ public class HttpClientCompatibilityTest {
         {
             connManager.closeIdle(TimeValue.NEG_ONE_MILLISECONDS);
             credentialsProvider.setCredentials(
-                    new AuthScope("otherhost", AuthScope.ANY_PORT, "Restricted Files"),
+                    new AuthScope("http", "otherhost", -1, "Restricted Files", null),
                     new UsernamePasswordCredentials("testuser", "nopassword".toCharArray()));
             final HttpClientContext context = HttpClientContext.create();
             context.setCredentialsProvider(credentialsProvider);

http://git-wip-us.apache.org/repos/asf/httpcomponents-client/blob/cca56beb/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/sync/TestClientAuthentication.java
----------------------------------------------------------------------
diff --git a/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/sync/TestClientAuthentication.java b/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/sync/TestClientAuthentication.java
index 495eee6..f2366eb 100644
--- a/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/sync/TestClientAuthentication.java
+++ b/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/sync/TestClientAuthentication.java
@@ -321,7 +321,7 @@ public class TestClientAuthentication extends LocalServerTestBase {
 
         final HttpClientContext context = HttpClientContext.create();
         final BasicCredentialsProvider credsProvider = new BasicCredentialsProvider();
-        credsProvider.setCredentials(AuthScope.ANY,
+        credsProvider.setCredentials(new AuthScope(null, null, -1, null ,null),
                 new UsernamePasswordCredentials("test", "test".toCharArray()));
         context.setCredentialsProvider(credsProvider);
 
@@ -536,7 +536,7 @@ public class TestClientAuthentication extends LocalServerTestBase {
         authCache.put(target, new BasicScheme());
         context.setAuthCache(authCache);
         final BasicCredentialsProvider credsProvider = new BasicCredentialsProvider();
-        credsProvider.setCredentials(AuthScope.ANY,
+        credsProvider.setCredentials(new AuthScope(null, null, -1, null ,null),
                 new UsernamePasswordCredentials("test", "stuff".toCharArray()));
         context.setCredentialsProvider(credsProvider);
 
@@ -611,7 +611,7 @@ public class TestClientAuthentication extends LocalServerTestBase {
 
         final HttpClientContext context = HttpClientContext.create();
         final BasicCredentialsProvider credsProvider = new BasicCredentialsProvider();
-        credsProvider.setCredentials(AuthScope.ANY,
+        credsProvider.setCredentials(new AuthScope(null, null, -1, null ,null),
                 new UsernamePasswordCredentials("test", "test".toCharArray()));
         context.setCredentialsProvider(credsProvider);
 

http://git-wip-us.apache.org/repos/asf/httpcomponents-client/blob/cca56beb/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/sync/TestClientAuthenticationFakeNTLM.java
----------------------------------------------------------------------
diff --git a/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/sync/TestClientAuthenticationFakeNTLM.java b/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/sync/TestClientAuthenticationFakeNTLM.java
index 377d826..7c7d14e 100644
--- a/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/sync/TestClientAuthenticationFakeNTLM.java
+++ b/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/sync/TestClientAuthenticationFakeNTLM.java
@@ -71,7 +71,7 @@ public class TestClientAuthenticationFakeNTLM extends LocalServerTestBase {
         final HttpHost target = start();
 
         final BasicCredentialsProvider credsProvider = new BasicCredentialsProvider();
-        credsProvider.setCredentials(AuthScope.ANY,
+        credsProvider.setCredentials(new AuthScope(null, null, -1, null ,null),
                 new NTCredentials("test", "test".toCharArray(), null, null));
 
         this.httpclient = HttpClients.custom()
@@ -118,7 +118,7 @@ public class TestClientAuthenticationFakeNTLM extends LocalServerTestBase {
         final HttpHost target = start();
 
         final BasicCredentialsProvider credsProvider = new BasicCredentialsProvider();
-        credsProvider.setCredentials(AuthScope.ANY,
+        credsProvider.setCredentials(new AuthScope(null, null, -1, null ,null),
                 new NTCredentials("test", "test".toCharArray(), null, null));
 
         this.httpclient = HttpClients.custom()
@@ -142,7 +142,7 @@ public class TestClientAuthenticationFakeNTLM extends LocalServerTestBase {
         final HttpHost target = start();
 
         final BasicCredentialsProvider credsProvider = new BasicCredentialsProvider();
-        credsProvider.setCredentials(AuthScope.ANY,
+        credsProvider.setCredentials(new AuthScope(null, null, -1, null ,null),
                 new NTCredentials("test", "test".toCharArray(), null, null));
 
         this.httpclient = HttpClients.custom()
@@ -187,7 +187,7 @@ public class TestClientAuthenticationFakeNTLM extends LocalServerTestBase {
 
         final HttpClientContext context = HttpClientContext.create();
         final BasicCredentialsProvider credsProvider = new BasicCredentialsProvider();
-        credsProvider.setCredentials(AuthScope.ANY,
+        credsProvider.setCredentials(new AuthScope(null, null, -1, null ,null),
                 new NTCredentials("test", "test".toCharArray(), null, null));
         context.setCredentialsProvider(credsProvider);
         final HttpGet httpget = new HttpGet("/");
@@ -208,7 +208,7 @@ public class TestClientAuthenticationFakeNTLM extends LocalServerTestBase {
 
         final HttpClientContext context = HttpClientContext.create();
         final BasicCredentialsProvider credsProvider = new BasicCredentialsProvider();
-        credsProvider.setCredentials(AuthScope.ANY,
+        credsProvider.setCredentials(new AuthScope(null, null, -1, null ,null),
                 new NTCredentials("test", "test".toCharArray(), null, null));
         context.setCredentialsProvider(credsProvider);
         final HttpGet httpget = new HttpGet("/");

http://git-wip-us.apache.org/repos/asf/httpcomponents-client/blob/cca56beb/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/sync/TestSPNegoScheme.java
----------------------------------------------------------------------
diff --git a/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/sync/TestSPNegoScheme.java b/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/sync/TestSPNegoScheme.java
index e39de23..b765a53 100644
--- a/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/sync/TestSPNegoScheme.java
+++ b/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/sync/TestSPNegoScheme.java
@@ -157,7 +157,7 @@ public class TestSPNegoScheme extends LocalServerTestBase {
         final AuthSchemeProvider nsf = new NegotiateSchemeProviderWithMockGssManager();
         final BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider();
         final Credentials use_jaas_creds = new UseJaasCredentials();
-        credentialsProvider.setCredentials(new AuthScope(null, -1, null), use_jaas_creds);
+        credentialsProvider.setCredentials(new AuthScope(null, null, -1, null, null), use_jaas_creds);
 
         final Registry<AuthSchemeProvider> authSchemeRegistry = RegistryBuilder.<AuthSchemeProvider>create()
             .register(AuthSchemes.SPNEGO, nsf)
@@ -188,7 +188,7 @@ public class TestSPNegoScheme extends LocalServerTestBase {
 
         final BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider();
         final Credentials use_jaas_creds = new UseJaasCredentials();
-        credentialsProvider.setCredentials(new AuthScope(null, -1, null), use_jaas_creds);
+        credentialsProvider.setCredentials(new AuthScope(null, null, -1, null, null), use_jaas_creds);
 
         final Registry<AuthSchemeProvider> authSchemeRegistry = RegistryBuilder.<AuthSchemeProvider>create()
             .register(AuthSchemes.SPNEGO, nsf)

http://git-wip-us.apache.org/repos/asf/httpcomponents-client/blob/cca56beb/httpclient5/src/main/java/org/apache/hc/client5/http/auth/AuthScope.java
----------------------------------------------------------------------
diff --git a/httpclient5/src/main/java/org/apache/hc/client5/http/auth/AuthScope.java b/httpclient5/src/main/java/org/apache/hc/client5/http/auth/AuthScope.java
index 294aa78..dfcc594 100644
--- a/httpclient5/src/main/java/org/apache/hc/client5/http/auth/AuthScope.java
+++ b/httpclient5/src/main/java/org/apache/hc/client5/http/auth/AuthScope.java
@@ -35,93 +35,57 @@ import org.apache.hc.core5.util.Args;
 import org.apache.hc.core5.util.LangUtils;
 
 /**
- * {@code AuthScope} represents an authentication scope consisting of a host name,
- * a port number, a realm name and an authentication scheme name.
- * <p>
- * This class can also optionally contain a host of origin, if created in response
- * to authentication challenge from a specific host.
+ * {@code AuthScope} represents an authentication scope consisting of
+ * an application protocol, a host name, a port number, a realm name
+ * and an authentication scheme name.
  * </p>
  * @since 4.0
  */
 @Contract(threading = ThreadingBehavior.IMMUTABLE)
 public class AuthScope {
 
-    /**
-     * The {@code null} value represents any host. In the future versions of
-     * HttpClient the use of this parameter will be discontinued.
-     */
-    public static final String ANY_HOST = null;
-
-    /**
-     * The {@code -1} value represents any port.
-     */
-    public static final int ANY_PORT = -1;
-
-    /**
-     * The {@code null} value represents any realm.
-     */
-    public static final String ANY_REALM = null;
-
-    /**
-     * The {@code null} value represents any authentication scheme.
-     */
-    public static final String ANY_SCHEME = null;
-
-    /**
-     * Default scope matching any host, port, realm and authentication scheme.
-     * In the future versions of HttpClient the use of this parameter will be
-     * discontinued.
-     */
-    public static final AuthScope ANY = new AuthScope(ANY_HOST, ANY_PORT, ANY_REALM, ANY_SCHEME);
-
-    /** The authentication scheme the credentials apply to. */
-    private final String scheme;
-
-    /** The realm the credentials apply to. */
-    private final String realm;
-
-    /** The host the credentials apply to. */
+    private final String protocol;
     private final String host;
-
-    /** The port the credentials apply to. */
     private final int port;
-
-    /** The original host, if known */
-    private final HttpHost origin;
+    private final String realm;
+    private final String authScheme;
 
     /**
-     * Defines auth scope with the given {@code host}, {@code port}, {@code realm}, and
-     * {@code schemeName}.
+     * Defines auth scope with the given {@code protocol}, {@code host}, {@code port},
+     * {@code realm}, and {@code schemeName}.
      *
-     * @param host authentication host. May be {@link #ANY_HOST} if applies
+     * @param protocol application protocol. May be {@code null} if applies
+     *   to any protocol.
+     * @param host authentication host. May be {@code null} if applies
      *   to any host.
-     * @param port authentication port. May be {@link #ANY_PORT} if applies
+     * @param port authentication port. May be {@code -1} if applies
      *   to any port of the host.
-     * @param realm authentication realm. May be {@link #ANY_REALM} if applies
+     * @param realm authentication realm. May be {@code null} if applies
      *   to any realm on the host.
-     * @param schemeName authentication scheme. May be {@link #ANY_SCHEME} if applies
-     *   to any scheme supported by the host.
+     * @param authScheme authentication scheme. May be {@code null} if applies
+     *   to any authScheme supported by the host.
      */
     public AuthScope(
+            final String protocol,
             final String host,
             final int port,
             final String realm,
-            final String schemeName) {
-        this.host = host == null ? ANY_HOST: host.toLowerCase(Locale.ROOT);
-        this.port = port < 0 ? ANY_PORT : port;
-        this.realm = realm == null ? ANY_REALM : realm;
-        this.scheme = schemeName == null ? ANY_SCHEME : schemeName.toUpperCase(Locale.ROOT);
-        this.origin = null;
+            final String authScheme) {
+        this.protocol = protocol != null ? protocol.toLowerCase(Locale.ROOT) : null;
+        this.host = host != null ? host.toLowerCase(Locale.ROOT) : null;
+        this.port = port >= 0 ? port: -1;
+        this.realm = realm;
+        this.authScheme = authScheme != null ? authScheme.toUpperCase(Locale.ROOT): null;
     }
 
     /**
      * Defines auth scope for a specific host of origin.
      *
      * @param origin host of origin
-     * @param realm authentication realm. May be {@link #ANY_REALM} if applies
+     * @param realm authentication realm. May be {@code null} if applies
      *   to any realm on the host.
-     * @param schemeName authentication scheme. May be {@link #ANY_SCHEME} if applies
-     *   to any scheme supported by the host.
+     * @param schemeName authentication authScheme. May be {@code null} if applies
+     *   to any authScheme supported by the host.
      *
      * @since 4.2
      */
@@ -130,11 +94,11 @@ public class AuthScope {
             final String realm,
             final String schemeName) {
         Args.notNull(origin, "Host");
+        this.protocol = origin.getSchemeName().toLowerCase(Locale.ROOT);
         this.host = origin.getHostName().toLowerCase(Locale.ROOT);
-        this.port = origin.getPort() < 0 ? ANY_PORT : origin.getPort();
-        this.realm = realm == null ? ANY_REALM : realm;
-        this.scheme = schemeName == null ? ANY_SCHEME : schemeName.toUpperCase(Locale.ROOT);
-        this.origin = origin;
+        this.port = origin.getPort() >= 0 ? origin.getPort() : -1;
+        this.realm = realm;
+        this.authScheme = schemeName != null ? schemeName.toUpperCase(Locale.ROOT): null;
     }
 
     /**
@@ -145,33 +109,19 @@ public class AuthScope {
      * @since 4.2
      */
     public AuthScope(final HttpHost origin) {
-        this(origin, ANY_REALM, ANY_SCHEME);
-    }
-
-    /**
-     * Defines auth scope with the given {@code host}, {@code port} and {@code realm}.
-     *
-     * @param host authentication host. May be {@link #ANY_HOST} if applies
-     *   to any host.
-     * @param port authentication port. May be {@link #ANY_PORT} if applies
-     *   to any port of the host.
-     * @param realm authentication realm. May be {@link #ANY_REALM} if applies
-     *   to any realm on the host.
-     */
-    public AuthScope(final String host, final int port, final String realm) {
-        this(host, port, realm, ANY_SCHEME);
+        this(origin, null, null);
     }
 
     /**
      * Defines auth scope with the given {@code host} and {@code port}.
      *
-     * @param host authentication host. May be {@link #ANY_HOST} if applies
+     * @param host authentication host. May be {@code null} if applies
      *   to any host.
-     * @param port authentication port. May be {@link #ANY_PORT} if applies
+     * @param port authentication port. May be {@code -1} if applies
      *   to any port of the host.
      */
     public AuthScope(final String host, final int port) {
-        this(host, port, ANY_REALM, ANY_SCHEME);
+        this(null, host, port, null, null);
     }
 
     /**
@@ -180,48 +130,31 @@ public class AuthScope {
     public AuthScope(final AuthScope authscope) {
         super();
         Args.notNull(authscope, "Scope");
+        this.protocol = authscope.getProtocol();
         this.host = authscope.getHost();
         this.port = authscope.getPort();
         this.realm = authscope.getRealm();
-        this.scheme = authscope.getScheme();
-        this.origin = authscope.getOrigin();
+        this.authScheme = authscope.getAuthScheme();
     }
 
-    /**
-     * @return host of origin. If unknown returns @null,
-     *
-     * @since 4.4
-     */
-    public HttpHost getOrigin() {
-        return this.origin;
+    public String getProtocol() {
+        return protocol;
     }
 
-    /**
-     * @return the host
-     */
     public String getHost() {
         return this.host;
     }
 
-    /**
-     * @return the port
-     */
     public int getPort() {
         return this.port;
     }
 
-    /**
-     * @return the realm name
-     */
     public String getRealm() {
         return this.realm;
     }
 
-    /**
-     * @return the scheme type
-     */
-    public String getScheme() {
-        return this.scheme;
+    public String getAuthScheme() {
+        return this.authScheme;
     }
 
     /**
@@ -233,69 +166,81 @@ public class AuthScope {
      */
     public int match(final AuthScope that) {
         int factor = 0;
-        if (LangUtils.equals(this.scheme, that.scheme)) {
+        if (LangUtils.equals(this.authScheme, that.authScheme)) {
             factor += 1;
         } else {
-            if (this.scheme != ANY_SCHEME && that.scheme != ANY_SCHEME) {
+            if (this.authScheme != null && that.authScheme != null) {
                 return -1;
             }
         }
         if (LangUtils.equals(this.realm, that.realm)) {
             factor += 2;
         } else {
-            if (this.realm != ANY_REALM && that.realm != ANY_REALM) {
+            if (this.realm != null && that.realm != null) {
                 return -1;
             }
         }
         if (this.port == that.port) {
             factor += 4;
         } else {
-            if (this.port != ANY_PORT && that.port != ANY_PORT) {
+            if (this.port != -1 && that.port != -1) {
                 return -1;
             }
         }
-        if (LangUtils.equals(this.host, that.host)) {
+        if (LangUtils.equals(this.protocol, that.protocol)) {
             factor += 8;
         } else {
-            if (this.host != ANY_HOST && that.host != ANY_HOST) {
+            if (this.protocol != null && that.protocol != null) {
+                return -1;
+            }
+        }
+        if (LangUtils.equals(this.host, that.host)) {
+            factor += 16;
+        } else {
+            if (this.host != null && that.host != null) {
                 return -1;
             }
         }
         return factor;
     }
 
-    /**
-     * @see java.lang.Object#equals(Object)
-     */
     @Override
-    public boolean equals(final Object o) {
-        if (o == null) {
-            return false;
-        }
-        if (o == this) {
+    public boolean equals(final Object obj) {
+        if (this == obj) {
             return true;
         }
-        if (!(o instanceof AuthScope)) {
-            return super.equals(o);
+        if (obj instanceof AuthScope) {
+            final AuthScope that = (AuthScope) obj;
+            return LangUtils.equals(this.protocol, that.protocol)
+                    && LangUtils.equals(this.host, that.host)
+                    && this.port == that.port
+                    && LangUtils.equals(this.realm, that.realm)
+                    && LangUtils.equals(this.authScheme, that.authScheme);
+        } else {
+            return false;
         }
-        final AuthScope that = (AuthScope) o;
-        return
-        LangUtils.equals(this.host, that.host)
-          && this.port == that.port
-          && LangUtils.equals(this.realm, that.realm)
-          && LangUtils.equals(this.scheme, that.scheme);
     }
 
-    /**
-     * @see java.lang.Object#toString()
-     */
+    @Override
+    public int hashCode() {
+        int hash = LangUtils.HASH_SEED;
+        hash = LangUtils.hashCode(hash, this.protocol);
+        hash = LangUtils.hashCode(hash, this.host);
+        hash = LangUtils.hashCode(hash, this.port);
+        hash = LangUtils.hashCode(hash, this.realm);
+        hash = LangUtils.hashCode(hash, this.authScheme);
+        return hash;
+    }
+
     @Override
     public String toString() {
         final StringBuilder buffer = new StringBuilder();
-        if (this.scheme != null) {
-            buffer.append(this.scheme.toUpperCase(Locale.ROOT));
-            buffer.append(' ');
+        if (this.authScheme != null) {
+            buffer.append(this.authScheme);
+        } else {
+            buffer.append("<any auth scheme>");
         }
+        buffer.append(' ');
         if (this.realm != null) {
             buffer.append('\'');
             buffer.append(this.realm);
@@ -303,27 +248,25 @@ public class AuthScope {
         } else {
             buffer.append("<any realm>");
         }
+        buffer.append(' ');
+        if (this.protocol != null) {
+            buffer.append(this.protocol);
+        } else {
+            buffer.append("<any protocol>");
+        }
+        buffer.append("://");
         if (this.host != null) {
-            buffer.append('@');
             buffer.append(this.host);
-            if (this.port >= 0) {
-                buffer.append(':');
-                buffer.append(this.port);
-            }
+        } else {
+            buffer.append("<any host>");
+        }
+        buffer.append(':');
+        if (this.port >= 0) {
+            buffer.append(this.port);
+        } else {
+            buffer.append("<any port>");
         }
         return buffer.toString();
     }
 
-    /**
-     * @see java.lang.Object#hashCode()
-     */
-    @Override
-    public int hashCode() {
-        int hash = LangUtils.HASH_SEED;
-        hash = LangUtils.hashCode(hash, this.host);
-        hash = LangUtils.hashCode(hash, this.port);
-        hash = LangUtils.hashCode(hash, this.realm);
-        hash = LangUtils.hashCode(hash, this.scheme);
-        return hash;
-    }
 }

http://git-wip-us.apache.org/repos/asf/httpcomponents-client/blob/cca56beb/httpclient5/src/main/java/org/apache/hc/client5/http/impl/AuthSupport.java
----------------------------------------------------------------------
diff --git a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/AuthSupport.java b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/AuthSupport.java
index c53a5cd..eb8c7e8 100644
--- a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/AuthSupport.java
+++ b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/AuthSupport.java
@@ -43,6 +43,7 @@ import org.apache.hc.core5.util.Args;
 public class AuthSupport {
 
     public static void extractFromAuthority(
+            final String scheme,
             final URIAuthority authority,
             final CredentialsStore credentialsStore) {
         Args.notNull(credentialsStore, "Credentials store");
@@ -64,7 +65,7 @@ public class AuthSupport {
             password = null;
         }
         credentialsStore.setCredentials(
-                new AuthScope(authority.getHostName(), authority.getPort(), null, AuthSchemes.BASIC),
+                new AuthScope(scheme, authority.getHostName(), authority.getPort(), null, AuthSchemes.BASIC),
                 new UsernamePasswordCredentials(userName, password));
     }
 

http://git-wip-us.apache.org/repos/asf/httpcomponents-client/blob/cca56beb/httpclient5/src/main/java/org/apache/hc/client5/http/impl/async/AsyncProtocolExec.java
----------------------------------------------------------------------
diff --git a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/async/AsyncProtocolExec.java b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/async/AsyncProtocolExec.java
index 622c269..6d524fe 100644
--- a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/async/AsyncProtocolExec.java
+++ b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/async/AsyncProtocolExec.java
@@ -125,7 +125,7 @@ class AsyncProtocolExec implements AsyncExecChainHandler {
         if (authority != null) {
             final CredentialsProvider credsProvider = clientContext.getCredentialsProvider();
             if (credsProvider instanceof CredentialsStore) {
-                AuthSupport.extractFromAuthority(authority, (CredentialsStore) credsProvider);
+                AuthSupport.extractFromAuthority(request.getScheme(), authority, (CredentialsStore) credsProvider);
             }
         }
 

http://git-wip-us.apache.org/repos/asf/httpcomponents-client/blob/cca56beb/httpclient5/src/main/java/org/apache/hc/client5/http/impl/auth/SystemDefaultCredentialsProvider.java
----------------------------------------------------------------------
diff --git a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/auth/SystemDefaultCredentialsProvider.java b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/auth/SystemDefaultCredentialsProvider.java
index eafab1c..23cbde5 100644
--- a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/auth/SystemDefaultCredentialsProvider.java
+++ b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/auth/SystemDefaultCredentialsProvider.java
@@ -45,7 +45,6 @@ import org.apache.hc.client5.http.config.AuthSchemes;
 import org.apache.hc.client5.http.protocol.HttpClientContext;
 import org.apache.hc.core5.annotation.Contract;
 import org.apache.hc.core5.annotation.ThreadingBehavior;
-import org.apache.hc.core5.http.HttpHost;
 import org.apache.hc.core5.http.HttpRequest;
 import org.apache.hc.core5.http.protocol.HttpContext;
 import org.apache.hc.core5.util.Args;
@@ -113,7 +112,7 @@ public class SystemDefaultCredentialsProvider implements CredentialsStore {
                 authscope.getPort(),
                 protocol,
                 authscope.getRealm(),
-                translateAuthScheme(authscope.getScheme()),
+                translateAuthScheme(authscope.getAuthScheme()),
                 targetHostURL,
                 requestorType);
     }
@@ -128,9 +127,7 @@ public class SystemDefaultCredentialsProvider implements CredentialsStore {
         final String host = authscope.getHost();
         if (host != null) {
             final HttpClientContext clientContext = context != null ? HttpClientContext.adapt(context) : null;
-            final int port = authscope.getPort();
-            final HttpHost origin = authscope.getOrigin();
-            final String protocol = origin != null ? origin.getSchemeName() : (port == 443 ? "https" : "http");
+            final String protocol = authscope.getProtocol() != null ? authscope.getProtocol() : (authscope.getPort() == 443 ? "https" : "http");
             PasswordAuthentication systemcreds = getSystemCreds(
                     protocol, authscope, Authenticator.RequestorType.SERVER, clientContext);
             if (systemcreds == null) {
@@ -161,7 +158,7 @@ public class SystemDefaultCredentialsProvider implements CredentialsStore {
                 if (domain != null) {
                     return new NTCredentials(systemcreds.getUserName(), systemcreds.getPassword(), null, domain);
                 }
-                if (AuthSchemes.NTLM.equalsIgnoreCase(authscope.getScheme())) {
+                if (AuthSchemes.NTLM.equalsIgnoreCase(authscope.getAuthScheme())) {
                     // Domain may be specified in a fully qualified user name
                     return new NTCredentials(
                             systemcreds.getUserName(), systemcreds.getPassword(), null, null);

http://git-wip-us.apache.org/repos/asf/httpcomponents-client/blob/cca56beb/httpclient5/src/main/java/org/apache/hc/client5/http/impl/classic/ProtocolExec.java
----------------------------------------------------------------------
diff --git a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/classic/ProtocolExec.java b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/classic/ProtocolExec.java
index 96794b3..0816223 100644
--- a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/classic/ProtocolExec.java
+++ b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/classic/ProtocolExec.java
@@ -130,7 +130,7 @@ final class ProtocolExec implements ExecChainHandler {
             if (authority != null) {
                 final CredentialsProvider credsProvider = context.getCredentialsProvider();
                 if (credsProvider instanceof CredentialsStore) {
-                    AuthSupport.extractFromAuthority(authority, (CredentialsStore) credsProvider);
+                    AuthSupport.extractFromAuthority(request.getScheme(), authority, (CredentialsStore) credsProvider);
                 }
             }
 

http://git-wip-us.apache.org/repos/asf/httpcomponents-client/blob/cca56beb/httpclient5/src/test/java/org/apache/hc/client5/http/auth/TestAuthScope.java
----------------------------------------------------------------------
diff --git a/httpclient5/src/test/java/org/apache/hc/client5/http/auth/TestAuthScope.java b/httpclient5/src/test/java/org/apache/hc/client5/http/auth/TestAuthScope.java
index f51ce05..cd2f1b8 100644
--- a/httpclient5/src/test/java/org/apache/hc/client5/http/auth/TestAuthScope.java
+++ b/httpclient5/src/test/java/org/apache/hc/client5/http/auth/TestAuthScope.java
@@ -37,149 +37,119 @@ public class TestAuthScope {
 
     @Test
     public void testBasics() {
-        final AuthScope authscope = new AuthScope("somehost", 80, "somerealm", "somescheme");
-        Assert.assertEquals("SOMESCHEME", authscope.getScheme());
+        final AuthScope authscope = new AuthScope("http", "somehost", 80, "somerealm", "somescheme");
+        Assert.assertEquals("SOMESCHEME", authscope.getAuthScheme());
+        Assert.assertEquals("http", authscope.getProtocol());
         Assert.assertEquals("somehost", authscope.getHost());
         Assert.assertEquals(80, authscope.getPort());
         Assert.assertEquals("somerealm", authscope.getRealm());
-        Assert.assertEquals("SOMESCHEME 'somerealm'@somehost:80", authscope.toString());
-    }
-
-    @Test
-    public void testBasicsOptionalRealm() {
-        final AuthScope authscope = new AuthScope("somehost", 80, AuthScope.ANY_REALM, "somescheme");
-        Assert.assertEquals("SOMESCHEME", authscope.getScheme());
-        Assert.assertEquals("somehost", authscope.getHost());
-        Assert.assertEquals(80, authscope.getPort());
-        Assert.assertEquals(null, authscope.getRealm());
-        Assert.assertEquals("SOMESCHEME <any realm>@somehost:80", authscope.toString());
-    }
-
-    @Test
-    public void testBasicsOptionalScheme() {
-        final AuthScope authscope = new AuthScope("somehost", 80, AuthScope.ANY_REALM, AuthScope.ANY_SCHEME);
-        Assert.assertEquals(null, authscope.getScheme());
-        Assert.assertEquals("somehost", authscope.getHost());
-        Assert.assertEquals(80, authscope.getPort());
-        Assert.assertEquals(null, authscope.getRealm());
-        Assert.assertEquals("<any realm>@somehost:80", authscope.toString());
-    }
-
-    @Test
-    public void testBasicsOptionalPort() {
-        final AuthScope authscope = new AuthScope("somehost", AuthScope.ANY_PORT, AuthScope.ANY_REALM, AuthScope.ANY_SCHEME);
-        Assert.assertEquals(null, authscope.getScheme());
-        Assert.assertEquals("somehost", authscope.getHost());
-        Assert.assertEquals(-1, authscope.getPort());
-        Assert.assertEquals(null, authscope.getRealm());
-        Assert.assertEquals("<any realm>@somehost", authscope.toString());
+        Assert.assertEquals("SOMESCHEME 'somerealm' http://somehost:80", authscope.toString());
     }
 
     @Test
     public void testByOrigin() {
         final HttpHost host = new HttpHost("somehost", 8080, "http");
         final AuthScope authscope = new AuthScope(host);
-        Assert.assertEquals(null, authscope.getScheme());
+        Assert.assertEquals(null, authscope.getAuthScheme());
         Assert.assertEquals("somehost", authscope.getHost());
         Assert.assertEquals(8080, authscope.getPort());
         Assert.assertEquals(null, authscope.getRealm());
-        Assert.assertEquals(host, authscope.getOrigin());
-        Assert.assertEquals("<any realm>@somehost:8080", authscope.toString());
+        Assert.assertEquals("http", authscope.getProtocol());
+        Assert.assertEquals("<any auth scheme> <any realm> http://somehost:8080", authscope.toString());
     }
 
     @Test
     public void testMixedCaseHostname() {
         final AuthScope authscope = new AuthScope("SomeHost", 80);
-        Assert.assertEquals(null, authscope.getScheme());
+        Assert.assertEquals(null, authscope.getAuthScheme());
         Assert.assertEquals("somehost", authscope.getHost());
         Assert.assertEquals(80, authscope.getPort());
         Assert.assertEquals(null, authscope.getRealm());
-        Assert.assertEquals("<any realm>@somehost:80", authscope.toString());
+        Assert.assertEquals("<any auth scheme> <any realm> <any protocol>://somehost:80", authscope.toString());
     }
 
+    @Test
     public void testByOriginMixedCaseHostname() throws Exception {
         final HttpHost host = new HttpHost("SomeHost", 8080, "http");
         final AuthScope authscope = new AuthScope(host);
         Assert.assertEquals("somehost", authscope.getHost());
-        Assert.assertEquals(host, authscope.getOrigin());
     }
 
     @Test
-    public void testBasicsOptionalHost() {
-        final AuthScope authscope = new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT, AuthScope.ANY_REALM, AuthScope.ANY_SCHEME);
-        Assert.assertEquals(null, authscope.getScheme());
+    public void testBasicsAllOptional() {
+        final AuthScope authscope = new AuthScope(null, null, -1, null, null);
+        Assert.assertEquals(null, authscope.getAuthScheme());
         Assert.assertEquals(null, authscope.getHost());
         Assert.assertEquals(-1, authscope.getPort());
         Assert.assertEquals(null, authscope.getRealm());
-        Assert.assertEquals("<any realm>", authscope.toString());
+        Assert.assertEquals("<any auth scheme> <any realm> <any protocol>://<any host>:<any port>", authscope.toString());
     }
 
     @Test
     public void testScopeMatching() {
-        final AuthScope authscope1 = new AuthScope("somehost", 80, "somerealm", "somescheme");
-        final AuthScope authscope2 = new AuthScope("someotherhost", 80, "somerealm", "somescheme");
+        final AuthScope authscope1 = new AuthScope("http", "somehost", 80, "somerealm", "somescheme");
+        final AuthScope authscope2 = new AuthScope("http", "someotherhost", 80, "somerealm", "somescheme");
         Assert.assertTrue(authscope1.match(authscope2) < 0);
 
-        int m1 = authscope1.match(
-                new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT, AuthScope.ANY_REALM, "somescheme"));
-        int m2 = authscope1.match(
-                new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT, "somerealm", AuthScope.ANY_SCHEME));
+        int m1 = authscope1.match(new AuthScope(null, null, -1, null, "somescheme"));
+        int m2 = authscope1.match(new AuthScope(null, null, -1, "somerealm", null));
+        Assert.assertTrue(m2 > m1);
+
+        m1 = authscope1.match(new AuthScope(null, null, -1, null, "somescheme"));
+        m2 = authscope1.match(new AuthScope(null, null, -1, "somerealm", null));
         Assert.assertTrue(m2 > m1);
 
-        m1 = authscope1.match(
-                new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT, AuthScope.ANY_REALM, "somescheme"));
-        m2 = authscope1.match(
-                new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT, "somerealm", AuthScope.ANY_SCHEME));
+        m1 = authscope1.match(new AuthScope(null, null, -1, "somerealm", "somescheme"));
+        m2 = authscope1.match(new AuthScope(null, null, 80, null, null));
         Assert.assertTrue(m2 > m1);
 
-        m1 = authscope1.match(
-                new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT, "somerealm", "somescheme"));
-        m2 = authscope1.match(
-                new AuthScope(AuthScope.ANY_HOST, 80, AuthScope.ANY_REALM, AuthScope.ANY_SCHEME));
+        m1 = authscope1.match(new AuthScope(null, null, 80, "somerealm", "somescheme"));
+        m2 = authscope1.match(new AuthScope(null, "somehost", -1, null, null));
         Assert.assertTrue(m2 > m1);
 
-        m1 = authscope1.match(
-                new AuthScope(AuthScope.ANY_HOST, 80, "somerealm", "somescheme"));
-        m2 = authscope1.match(
-                new AuthScope("somehost", AuthScope.ANY_PORT, AuthScope.ANY_REALM, AuthScope.ANY_SCHEME));
+        m1 = authscope1.match(new AuthScope(null, null, 80, "somerealm", "somescheme"));
+        m2 = authscope1.match(new AuthScope(null, "somehost", -1, null, null));
         Assert.assertTrue(m2 > m1);
 
-        m1 = authscope1.match(AuthScope.ANY);
-        m2 = authscope1.match(
-                new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT, AuthScope.ANY_REALM, "somescheme"));
+        m1 = authscope1.match(new AuthScope(null, null, -1, null, null));
+        m2 = authscope1.match(new AuthScope(null, null, -1, null, "somescheme"));
         Assert.assertTrue(m2 > m1);
     }
 
     @Test
     public void testEquals() {
-        final AuthScope authscope1 = new AuthScope("somehost", 80, "somerealm", "somescheme");
-        final AuthScope authscope2 = new AuthScope("someotherhost", 80, "somerealm", "somescheme");
-        final AuthScope authscope3 = new AuthScope("somehost", 80, "somerealm", "somescheme");
-        final AuthScope authscope4 = new AuthScope("somehost", 8080, "somerealm", "somescheme");
-        final AuthScope authscope5 = new AuthScope("somehost", 80, "someotherrealm", "somescheme");
-        final AuthScope authscope6 = new AuthScope("somehost", 80, "somerealm", "someotherscheme");
+        final AuthScope authscope1 = new AuthScope("http", "somehost", 80, "somerealm", "somescheme");
+        final AuthScope authscope2 = new AuthScope("http", "someotherhost", 80, "somerealm", "somescheme");
+        final AuthScope authscope3 = new AuthScope("http", "somehost", 80, "somerealm", "somescheme");
+        final AuthScope authscope4 = new AuthScope("http", "somehost", 8080, "somerealm", "somescheme");
+        final AuthScope authscope5 = new AuthScope("http", "somehost", 80, "someotherrealm", "somescheme");
+        final AuthScope authscope6 = new AuthScope("http", "somehost", 80, "somerealm", "someotherscheme");
+        final AuthScope authscope7 = new AuthScope("https", "somehost", 80, "somerealm", "somescheme");
         Assert.assertTrue(authscope1.equals(authscope1));
         Assert.assertFalse(authscope1.equals(authscope2));
         Assert.assertTrue(authscope1.equals(authscope3));
         Assert.assertFalse(authscope1.equals(authscope4));
         Assert.assertFalse(authscope1.equals(authscope5));
         Assert.assertFalse(authscope1.equals(authscope6));
+        Assert.assertFalse(authscope1.equals(authscope7));
     }
 
     @Test
     public void testHash() {
-        final AuthScope authscope1 = new AuthScope("somehost", 80, "somerealm", "somescheme");
-        final AuthScope authscope2 = new AuthScope("someotherhost", 80, "somerealm", "somescheme");
-        final AuthScope authscope3 = new AuthScope("somehost", 80, "somerealm", "somescheme");
-        final AuthScope authscope4 = new AuthScope("somehost", 8080, "somerealm", "somescheme");
-        final AuthScope authscope5 = new AuthScope("somehost", 80, "someotherrealm", "somescheme");
-        final AuthScope authscope6 = new AuthScope("somehost", 80, "somerealm", "someotherscheme");
+        final AuthScope authscope1 = new AuthScope("http", "somehost", 80, "somerealm", "somescheme");
+        final AuthScope authscope2 = new AuthScope("http", "someotherhost", 80, "somerealm", "somescheme");
+        final AuthScope authscope3 = new AuthScope("http", "somehost", 80, "somerealm", "somescheme");
+        final AuthScope authscope4 = new AuthScope("http", "somehost", 8080, "somerealm", "somescheme");
+        final AuthScope authscope5 = new AuthScope("http", "somehost", 80, "someotherrealm", "somescheme");
+        final AuthScope authscope6 = new AuthScope("http", "somehost", 80, "somerealm", "someotherscheme");
+        final AuthScope authscope7 = new AuthScope("https", "somehost", 80, "somerealm", "somescheme");
         Assert.assertTrue(authscope1.hashCode() == authscope1.hashCode());
         Assert.assertFalse(authscope1.hashCode() == authscope2.hashCode());
         Assert.assertTrue(authscope1.hashCode() == authscope3.hashCode());
         Assert.assertFalse(authscope1.hashCode() == authscope4.hashCode());
         Assert.assertFalse(authscope1.hashCode() == authscope5.hashCode());
         Assert.assertFalse(authscope1.hashCode() == authscope6.hashCode());
+        Assert.assertFalse(authscope1.hashCode() == authscope7.hashCode());
     }
 
 }

http://git-wip-us.apache.org/repos/asf/httpcomponents-client/blob/cca56beb/httpclient5/src/test/java/org/apache/hc/client5/http/impl/auth/TestBasicCredentialsProvider.java
----------------------------------------------------------------------
diff --git a/httpclient5/src/test/java/org/apache/hc/client5/http/impl/auth/TestBasicCredentialsProvider.java b/httpclient5/src/test/java/org/apache/hc/client5/http/impl/auth/TestBasicCredentialsProvider.java
index cf5a5c1..5c70032 100644
--- a/httpclient5/src/test/java/org/apache/hc/client5/http/impl/auth/TestBasicCredentialsProvider.java
+++ b/httpclient5/src/test/java/org/apache/hc/client5/http/impl/auth/TestBasicCredentialsProvider.java
@@ -43,14 +43,10 @@ public class TestBasicCredentialsProvider {
     public final static Credentials CREDS2 =
         new UsernamePasswordCredentials("user2", "pass2".toCharArray());
 
-    public final static AuthScope SCOPE1 =
-        new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT, "realm1");
-    public final static AuthScope SCOPE2 =
-        new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT, "realm2");
-    public final static AuthScope BOGUS =
-        new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT, "bogus");
-    public final static AuthScope DEFSCOPE =
-        new AuthScope("host", AuthScope.ANY_PORT, "realm");
+    public final static AuthScope SCOPE1 = new AuthScope(null, null, -1, "realm1", null);
+    public final static AuthScope SCOPE2 = new AuthScope(null, null, -1, "realm2", null);
+    public final static AuthScope BOGUS = new AuthScope(null, null, -1, "bogus", null);
+    public final static AuthScope DEFSCOPE = new AuthScope(null, "host", -1, "realm", null);
 
     @Test
     public void testBasicCredentialsProviderCredentials() {
@@ -70,7 +66,7 @@ public class TestBasicCredentialsProvider {
     @Test
     public void testBasicCredentialsProviderDefaultCredentials() {
         final BasicCredentialsProvider state = new BasicCredentialsProvider();
-        state.setCredentials(AuthScope.ANY, CREDS1);
+        state.setCredentials(new AuthScope(null, null, -1, null ,null), CREDS1);
         state.setCredentials(SCOPE2, CREDS2);
         Assert.assertEquals(CREDS1, state.getCredentials(BOGUS, null));
     }
@@ -79,7 +75,7 @@ public class TestBasicCredentialsProvider {
     public void testDefaultCredentials() throws Exception {
         final BasicCredentialsProvider state = new BasicCredentialsProvider();
         final Credentials expected = new UsernamePasswordCredentials("name", "pass".toCharArray());
-        state.setCredentials(AuthScope.ANY, expected);
+        state.setCredentials(new AuthScope(null, null, -1, null ,null), expected);
         final Credentials got = state.getCredentials(DEFSCOPE, null);
         Assert.assertEquals(got, expected);
     }
@@ -97,8 +93,7 @@ public class TestBasicCredentialsProvider {
     public void testHostCredentials() throws Exception {
         final BasicCredentialsProvider state = new BasicCredentialsProvider();
         final Credentials expected = new UsernamePasswordCredentials("name", "pass".toCharArray());
-        state.setCredentials(
-            new AuthScope("host", AuthScope.ANY_PORT, AuthScope.ANY_REALM), expected);
+        state.setCredentials(new AuthScope(null, "host", -1, null, null), expected);
         final Credentials got = state.getCredentials(DEFSCOPE, null);
         Assert.assertEquals(expected, got);
     }
@@ -107,10 +102,8 @@ public class TestBasicCredentialsProvider {
     public void testWrongHostCredentials() throws Exception {
         final BasicCredentialsProvider state = new BasicCredentialsProvider();
         final Credentials expected = new UsernamePasswordCredentials("name", "pass".toCharArray());
-        state.setCredentials(
-            new AuthScope("host1", AuthScope.ANY_PORT, "realm"), expected);
-        final Credentials got = state.getCredentials(
-            new AuthScope("host2", AuthScope.ANY_PORT, "realm"), null);
+        state.setCredentials(new AuthScope(null, "host1", -1, "realm", null), expected);
+        final Credentials got = state.getCredentials(new AuthScope(null, "host2", -1, "realm", null), null);
         Assert.assertNotSame(expected, got);
     }
 
@@ -118,10 +111,8 @@ public class TestBasicCredentialsProvider {
     public void testWrongRealmCredentials() throws Exception {
         final BasicCredentialsProvider state = new BasicCredentialsProvider();
         final Credentials cred = new UsernamePasswordCredentials("name", "pass".toCharArray());
-        state.setCredentials(
-            new AuthScope("host", AuthScope.ANY_PORT, "realm1"), cred);
-        final Credentials got = state.getCredentials(
-            new AuthScope("host", AuthScope.ANY_PORT, "realm2"), null);
+        state.setCredentials(new AuthScope(null, "host", -1, "realm1", null), cred);
+        final Credentials got = state.getCredentials(new AuthScope(null, "host", -1, "realm2", null), null);
         Assert.assertNotSame(cred, got);
     }
 
@@ -141,27 +132,24 @@ public class TestBasicCredentialsProvider {
         final Credentials creds2 = new UsernamePasswordCredentials("name2", "pass2".toCharArray());
         final Credentials creds3 = new UsernamePasswordCredentials("name3", "pass3".toCharArray());
 
-        final AuthScope scope1 = new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT, AuthScope.ANY_REALM);
-        final AuthScope scope2 = new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT, "somerealm");
-        final AuthScope scope3 = new AuthScope("somehost", AuthScope.ANY_PORT, AuthScope.ANY_REALM);
+        final AuthScope scope1 = new AuthScope(null, null, -1, null, null);
+        final AuthScope scope2 = new AuthScope(null, null, -1, "somerealm", null);
+        final AuthScope scope3 = new AuthScope(null, "somehost", -1, null, null);
 
         final BasicCredentialsProvider state = new BasicCredentialsProvider();
         state.setCredentials(scope1, creds1);
         state.setCredentials(scope2, creds2);
         state.setCredentials(scope3, creds3);
 
-        Credentials got = state.getCredentials(
-            new AuthScope("someotherhost", 80, "someotherrealm", "basic"), null);
+        Credentials got = state.getCredentials(new AuthScope("http", "someotherhost", 80, "someotherrealm", "basic"), null);
         Credentials expected = creds1;
         Assert.assertEquals(expected, got);
 
-        got = state.getCredentials(
-            new AuthScope("someotherhost", 80, "somerealm", "basic"), null);
+        got = state.getCredentials(new AuthScope("http", "someotherhost", 80, "somerealm", "basic"), null);
         expected = creds2;
         Assert.assertEquals(expected, got);
 
-        got = state.getCredentials(
-            new AuthScope("somehost", 80, "someotherrealm", "basic"), null);
+        got = state.getCredentials(new AuthScope("http", "somehost", 80, "someotherrealm", "basic"), null);
         expected = creds3;
         Assert.assertEquals(expected, got);
     }

http://git-wip-us.apache.org/repos/asf/httpcomponents-client/blob/cca56beb/httpclient5/src/test/java/org/apache/hc/client5/http/impl/auth/TestSystemDefaultCredentialsProvider.java
----------------------------------------------------------------------
diff --git a/httpclient5/src/test/java/org/apache/hc/client5/http/impl/auth/TestSystemDefaultCredentialsProvider.java b/httpclient5/src/test/java/org/apache/hc/client5/http/impl/auth/TestSystemDefaultCredentialsProvider.java
index f0853c5..790ca38 100644
--- a/httpclient5/src/test/java/org/apache/hc/client5/http/impl/auth/TestSystemDefaultCredentialsProvider.java
+++ b/httpclient5/src/test/java/org/apache/hc/client5/http/impl/auth/TestSystemDefaultCredentialsProvider.java
@@ -90,7 +90,7 @@ public class TestSystemDefaultCredentialsProvider {
         final AuthenticatorDelegate authenticatorDelegate = installAuthenticator(AUTH1);
 
         final URL httpRequestUrl = new URL(TARGET_SCHEME1, TARGET_HOST1, TARGET_PORT1, "/");
-        final AuthScope authScope = new AuthScope(PROXY_HOST1, PROXY_PORT1, PROMPT1, "BASIC");
+        final AuthScope authScope = new AuthScope(PROXY_PROTOCOL1, PROXY_HOST1, PROXY_PORT1, PROMPT1, "BASIC");
         final HttpCoreContext coreContext = new HttpCoreContext();
         coreContext.setAttribute(HttpCoreContext.HTTP_REQUEST, new HttpGet(httpRequestUrl.toURI()));
 
@@ -110,7 +110,7 @@ public class TestSystemDefaultCredentialsProvider {
 
         final AuthenticatorDelegate authenticatorDelegate = installAuthenticator(AUTH1);
 
-        final AuthScope authScope = new AuthScope(PROXY_HOST1, PROXY_PORT1, PROMPT1, "BASIC");
+        final AuthScope authScope = new AuthScope(PROXY_PROTOCOL1, PROXY_HOST1, PROXY_PORT1, PROMPT1, "BASIC");
 
         final Credentials receivedCredentials =
             new SystemDefaultCredentialsProvider().getCredentials(authScope, null);

http://git-wip-us.apache.org/repos/asf/httpcomponents-client/blob/cca56beb/httpclient5/src/test/java/org/apache/hc/client5/http/impl/classic/TestProtocolExec.java
----------------------------------------------------------------------
diff --git a/httpclient5/src/test/java/org/apache/hc/client5/http/impl/classic/TestProtocolExec.java b/httpclient5/src/test/java/org/apache/hc/client5/http/impl/classic/TestProtocolExec.java
index db1a064..049f79f 100644
--- a/httpclient5/src/test/java/org/apache/hc/client5/http/impl/classic/TestProtocolExec.java
+++ b/httpclient5/src/test/java/org/apache/hc/client5/http/impl/classic/TestProtocolExec.java
@@ -138,7 +138,7 @@ public class TestProtocolExec {
         protocolExec.execute(request, scope, chain);
         Assert.assertEquals(new URI("http://bar/test"), request.getUri());
         final CredentialsProvider credentialsProvider = context.getCredentialsProvider();
-        final Credentials creds = credentialsProvider.getCredentials(new AuthScope("bar", -1, null), null);
+        final Credentials creds = credentialsProvider.getCredentials(new AuthScope(null, "bar", -1, null, null), null);
         Assert.assertNotNull(creds);
         Assert.assertEquals("somefella", creds.getUserPrincipal().getName());
     }