prosi�abym o niewielk� pomoc - wyjasnienie w zakresie konfiguracji
po��czenia do aplikacji typu webservices (SOAP1.1) dla aplikacji typu
Windows Forms.
Problemem jest dla mnie konfiguracja autentykacji u�ytkownika na poziomie
ka�dego ��dania - ma to by� zwyk�a "Basic authentication", baz uzycia SSL
b�d� certyfikat�w i bez integracji z logowaniem Windows.
Ustawiam w aplikacji po��czenie:
kl = new MyWebservicesClient();
kl.ClientCredentials.UserName.UserName = "user";
kl.ClientCredentials.UserName.Password = "pass";
kl.Open();
I do tej pory wszystko jest poprawnie - ��cz� si� si� bez b�lu - a
przynajmniej otrzymuj� client state = "Open" i zwr�cony adres Endpoint-a.
Natomiast dla ka�dego ��dania wywo�ania metody webservices, np.
listBoxResult.Items.Add(kl.MojaMetoda(costam).ToString());
Skutkuje informacj� zwrotn�:
HTTP ERROR 401, czyli brak autentykacji - wysy�ane ��danie logowania w
trybie 'Anonymous'.
Ustawienia w app.config, o ile dobrze rozumiem, powinny by� nast�puj�ce:
<security mode="TransportCredentialsOnly">
<transport clientCredentialType="None"
proxyCredentialType="None" realm="" />
<message clientCredentialType="UserName"
algorithmSuite="Default" />
</security>
Czy dobrze rozumuj� , �e:
- korzystanie z security mode="Message" dotyczy tylko autentykacji Windows?
- security mode="Transport" dotyczy tylko SSL? (taki b��d dostaj�:
oczekiwano https, jest: http)
- wydaje mi si�, � nie mog� skorzysta� z wsHttpBinding - tam znalaz�am tylko
mo�liwp�� pod��cze� do SOAP 1.2 i zwi�kszonego poziomu zabezpiecze�
W jaki spos�b skonfigurowa� b�d� wywo�a� ��danie bez dodatkowych
zabezpiecze�, ale do ka�dego "dokleja�" user/pass?
--
LadyRoot
-----------------------------------
The future is not what it used to be.
Nie jestem expertem od WFC ale z tego co mi siďż˝ wydaje to nie da siďż˝
"w��czy�" autoryzacji user�w bez u�ycia SSL. Wydaje mi si�, �e
przesy�anie login�w i hase� otwartym tekstem nie ma sensu. To tak samo
jakby nie by�o �adnej autoryzacji.
Wi�cej informacji znajdziesz tu:
http://msdn.microsoft.com/en-us/library/ms733775.aspx
Je�eli dobrze zrozumia�em opis w dokumentacji to ustawienie
> kl = new MyWebservicesClient();
> kl.ClientCredentials.UserName.UserName = "user";
> kl.ClientCredentials.UserName.Password = "pass";
powoduje �e na pocz�tku user jest autoryzowany, dostaje jaki� token i
p�niej ten token jest wysy�any z ka�d� wiadomo�ci� wi�c serwer wie z
kim gada.
Ponadto na servwerze musisz zaimplementowa� klas� dziedzicz�c� po
UserNamePasswordValidator
tu masz wiecej do poczytania:
http://msdn.microsoft.com/en-us/library/system.identitymodel.selectors.usernamepasswordvalidator.aspx
�eby server u�ywa� tej klasy do autoryzacji user�w musisz dodatkowo
skonfigurowaďż˝ na servwerze:
<serviceBehaviors>
<behavior name="name...">
...
<serviceCredentials>
...
<userNameAuthentication
userNamePasswordValidationMode="Custom"
customUserNamePasswordValidatorType="TwojeNamespace.TwojaKlasaImplementujacaUserNamePasswordValidator,
TwojaApplikacja" />
</serviceCredentials>
</behavior>
</serviceBehaviors>
> W jaki spos�b skonfigurowa� b�d� wywo�a� ��danie bez dodatkowych
> zabezpiecze�, ale do ka�dego "dokleja�" user/pass?
Je�eli chcesz bez zabezpiecze� i chcesz z ka�d� wiadomo�ci� przesy�a�
user credentials to prawdopodobnie musisz sama coďż˝ zaimpementowaďż˝. Np
aby zmieni� co� w nag��wku SOAP mo�esz u�y� [MessageHeader].
Pozdrawiam