5

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.

2 Answers 2

15

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.

Sign up to request clarification or add additional context in comments.

3 Comments

I am consuming a service. The service is authenticated using user name and password. How can we get the proxy address and credentials?
I am getting 502 Bad Gateway stackoverflow.com/questions/10807134/… when I used default proxy as mentioned in social.msdn.microsoft.com/Forums/en-US/wcf/thread/…
I used this as the basis for our issue where we have a proxy exclusion rule to allow access to our endpoint without credentials but our endpoint has a custom validator so WCF was trying to use the message credentials against the proxy as well. My solution was to replace Credentials = new NetworkCredential(userName, password) with UseDefaultCredentials = true. This causes WCF to pass no credential to the proxy and pass the username/password in the messgae. Awesome! Thank you!
2

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

4 Comments

Ye, I saw that. Problem is that I cannot find anywhere to set my username / password for the proxy, thats just an enum of authentication types...
I haven't tried but for I saw you can set it to take your default proxy credentials, the one you have set in IE
agreed, and that works. we're wanting to use credentials the user has typed in... (i.e. the user has typed in 2 sets of credentials)
hmm, reading this webpage, it seems that its not possible: kennyw.com/indigo/143

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.