2008-10-09 15 views
5

Czy można udostępnić WCF niestandardowy adres proxy i niestandardowe poświadczenia?Uwierzytelnianie WCF Custom Http Proxy

Znalazłem tę odpowiedź na stackoverflow: How to set proxy with credentials to generated WCF client?, ale mam komplikację, usługa, której uwierzytelnianie używa, używa własnego uwierzytelniania, więc muszę użyć dwóch zestawów poświadczeń (jeden do uzyskania za pośrednictwem serwera proxy, a drugi w celu uwierzytelnienia w stosunku do usługi)

Używam techniki opisanej w odpowiedzi na inne pytanie w celu podania poświadczeń usługi. na przykład

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

mogę ustawić adres serwera proxy przy użyciu mniej więcej tak:

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

Jak ustawić co jest skutecznie dwa zestawy poświadczeń? (Uwaga: dane uwierzytelniające dla proxy i rzeczywistej usługi są różne!) Należy również zauważyć, że szczegóły proxy nie muszą być domyślnymi szczegółowymi danymi proxy systemu.

Odpowiedz

13

Jeśli ustawisz właściwość WebRequest.DefaultWebProxy do nowego WebProxy z poświadczeniami, WCF będzie go używać dla wszystkich żądań HTTP, które to sprawia. (Będzie to dotyczyć wszystkich HttpWebRequests wykorzystywane przez aplikację, chyba że wyraźnie nadpisane).

// 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 zawiera dalszych szczegółów.

+0

Używam usługi. Usługa jest uwierzytelniana przy użyciu nazwy użytkownika i hasła. Jak uzyskać adres proxy i dane uwierzytelniające? – Lijo

+0

otrzymuję 502 Bad Gateway jest http://stackoverflow.com/questions/10807134/azure-service-bus-relay-502-bad-gateway-after-service-restart kiedy używany domyślny pełnomocnictwa, o którym mowa w http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/5f8d2c3a-164f-411a-b387-91f0be51f190/ – Lijo

+0

Użyłem tego jako podstawy dla naszego problemu, w którym mamy regułę wykluczania proxy, aby umożliwić dostęp do naszego punktu końcowego bez poświadczeń, ale nasz punkt końcowy ma niestandardowy walidator, więc WCF próbował użyć poświadczeń wiadomości również w stosunku do proxy. Moim rozwiązaniem było zastąpienie 'Credentials = new NetworkCredential (userName, password)' z 'UseDefaultCredentials = true'. To powoduje, że WCF nie przekazuje poświadczeń proxy i podaje nazwę użytkownika/hasło w messgae. Niesamowite! Dziękuję Ci! – Shevek

2

Ustawione poświadczenia klienta są prawidłowe w celu uwierzytelnienia w usługach.
Do uwierzytelniania proxy należy użyć HttpTransportSecurity.ProxyCredentials.

Ten link może ci pomóc.

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

+0

Ye, widziałem to. problem polega na tym, że nie mogę znaleźć nigdzie ustawić mój login/hasło do serwera proxy, to jest to po prostu enum typów uwierzytelniania ... – Gareth

+1

nie mam wypróbowany, ale widziałem, że możesz ustawić go tak, aby odebrał twoje domyślne poświadczenia proxy, które ustawiłeś w IE – sebagomez

+0

wpisane zbyt szybko :) Nie próbowałem go, ale za to, co widziałem ... – sebagomez

1

Od komentarzach do mojej odpowiedzi myślę, że nie jest możliwe, aby mieć różne poświadczenia uwierzytelniania usług i HTTP proxy.

ssać! :(

+0

ye. No cóż. Idziemy z opcją "Użyj domyślnego proxy systemowego" lub "Nie używaj proxy" ... Dzięki za pomoc! – Gareth

+0

Dokładnie! Sprawdź to: http://kennyw.com/indigo/106 Do widzenia –