diff --git a/src/core/ext/filters/client_channel/http_proxy.c b/src/core/ext/filters/client_channel/http_proxy.c
index cfb5ec6..faa4b3c 100644
--- a/src/core/ext/filters/client_channel/http_proxy.c
+++ b/src/core/ext/filters/client_channel/http_proxy.c
@@ -30,13 +30,17 @@
 #include "src/core/ext/filters/client_channel/uri_parser.h"
 #include "src/core/lib/channel/channel_args.h"
 #include "src/core/lib/support/env.h"
+#include "src/core/lib/support/string.h"
+#include "src/core/lib/slice/b64.h"
 
-static char* grpc_get_http_proxy_server(grpc_exec_ctx* exec_ctx) {
+static void grpc_get_http_proxy_server(grpc_exec_ctx* exec_ctx,
+                                char **name_to_resolve,
+                                char **user_cred) {
+  *name_to_resolve = NULL;
   char* uri_str = gpr_getenv("http_proxy");
-  if (uri_str == NULL) return NULL;
+  if (uri_str == NULL) return;
   grpc_uri* uri =
       grpc_uri_parse(exec_ctx, uri_str, false /* suppress_errors */);
-  char* proxy_name = NULL;
   if (uri == NULL || uri->authority == NULL) {
     gpr_log(GPR_ERROR, "cannot parse value of 'http_proxy' env var");
     goto done;
@@ -45,15 +49,18 @@
     gpr_log(GPR_ERROR, "'%s' scheme not supported in proxy URI", uri->scheme);
     goto done;
   }
-  if (strchr(uri->authority, '@') != NULL) {
-    gpr_log(GPR_ERROR, "userinfo not supported in proxy URI");
-    goto done;
+  char *user_cred_end = strchr(uri->authority, '@');
+  if (user_cred_end != NULL) {
+    *name_to_resolve = gpr_strdup(user_cred_end + 1);
+    *user_cred_end = '\0';
+    *user_cred = gpr_strdup(uri->authority);
+    gpr_log(GPR_INFO, "userinfo found in proxy URI");
+  } else {
+    *name_to_resolve = gpr_strdup(uri->authority);
   }
-  proxy_name = gpr_strdup(uri->authority);
 done:
   gpr_free(uri_str);
   grpc_uri_destroy(uri);
-  return proxy_name;
 }
 
 static bool proxy_mapper_map_name(grpc_exec_ctx* exec_ctx,
@@ -62,7 +69,8 @@
                                   const grpc_channel_args* args,
                                   char** name_to_resolve,
                                   grpc_channel_args** new_args) {
-  *name_to_resolve = grpc_get_http_proxy_server(exec_ctx);
+  char *user_cred = NULL;
+  grpc_get_http_proxy_server(exec_ctx, name_to_resolve, &user_cred);
   if (*name_to_resolve == NULL) return false;
   grpc_uri* uri =
       grpc_uri_parse(exec_ctx, server_uri, false /* suppress_errors */);
@@ -71,19 +79,40 @@
             "'http_proxy' environment variable set, but cannot "
             "parse server URI '%s' -- not using proxy",
             server_uri);
-    if (uri != NULL) grpc_uri_destroy(uri);
+    if (uri != NULL) {
+      gpr_free(user_cred);
+      grpc_uri_destroy(uri);
+    }
     return false;
   }
   if (strcmp(uri->scheme, "unix") == 0) {
     gpr_log(GPR_INFO, "not using proxy for Unix domain socket '%s'",
             server_uri);
+    gpr_free(user_cred);
     grpc_uri_destroy(uri);
     return false;
   }
-  grpc_arg new_arg = grpc_channel_arg_string_create(
+
+  grpc_arg args_to_add[2];
+  args_to_add[0] = grpc_channel_arg_string_create(
       GRPC_ARG_HTTP_CONNECT_SERVER,
       uri->path[0] == '/' ? uri->path + 1 : uri->path);
-  *new_args = grpc_channel_args_copy_and_add(args, &new_arg, 1);
+
+  if(user_cred != NULL) {
+    /* Use base64 encoding for user credentials */
+    char *encoded_user_cred =
+        grpc_base64_encode(user_auth, strlen(user_cred), 0, 0);
+    char *header;
+    gpr_asprintf(&header, "Proxy-Authorization:Basic %s", encoded_user_cred);
+    gpr_free(encoded_user_cred);
+    args_to_add[1] = grpc_channel_arg_string_create(
+        GRPC_ARG_HTTP_CONNECT_HEADERS, header);
+    *new_args = grpc_channel_args_copy_and_add(args, args_to_add, 2);
+    gpr_free(header);
+  } else {
+    *new_args = grpc_channel_args_copy_and_add(args, args_to_add, 1);
+  }
+  gpr_free(user_cred);
   grpc_uri_destroy(uri);
   return true;
 }
