Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

WCF Custom Http Proxy Authentication

Is it possible to provide WCF with a custom proxy address and custom credentials?

I've found this answer on stackoverflow: How to set proxy with credentials to generated WCF client?, but I've got a complication, the service I'm authenticating against uses its own authentication, so I've got to use two sets of credentials (one to get through the proxy, and the other to authenticate against the service)

I'm using the technique described in the answers to the other question to provide the service credentials. e.g.

client.ClientCredentials.UserName.UserName = username;
client.ClientCredentials.UserName.Password = password;

I can set the address of the proxy using something like this:

(client.Endpoint.Binding as WSHttpBinding).ProxyAddress = ...;

How do I set what is effectively two sets of credentials? (NB: The credentials for the proxy and the actual service are different!) Also note that the proxy details are not necessarily the default system proxy details.

like image 916
Gareth Avatar asked Oct 09 '08 12:10

Gareth


2 Answers

The client credentials you're setting are fine in order to authenticate to your services.
For proxy authentication you need to use HttpTransportSecurity.ProxyCredentials.

This link might help you out.

http://msdn.microsoft.com/en-us/library/system.servicemodel.httptransportsecurity.proxycredentialtype.aspx

like image 44
sebagomez Avatar answered Nov 14 '22 03:11

sebagomez


If you set the WebRequest.DefaultWebProxy property to a new WebProxy with credentials, WCF will use it for all HTTP requests that it makes. (This will affect all HttpWebRequests used by the application unless explicitly overridden).

// get this information from the user / config file / etc.
Uri proxyAddress;
string userName;
string password;

// set this before any web requests or WCF calls
WebRequest.DefaultWebProxy = new WebProxy(proxyAddress)
{
    Credentials = new NetworkCredential(userName, password),
};

My blog post on proxy servers contains further details.

like image 137
Bradley Grainger Avatar answered Nov 14 '22 04:11

Bradley Grainger