Leave a comment

Tego właśnie szukałem – przykładów implementacji autentykacji serwisów w WCF. Mam jednak z problem autentykacji między serwerem WCF a klientem w PHP (tam mogę skorzystać jedynie z CURL). Nie wiem jak zacząć …

Zapiski programisty .net

W celu zaimplementowania customowego uwierzytelniania użytkownika chcącego wykonać operacje w serwisie WCF, można skorzystać z Username Password Authentication.

Rozwiązanie to wymaga dodatkowo posiadania/wygenerowania certyfikatu X509.

Korzystamy z bindingu wsHttpBinding z włączanym zabezpieczeniem transmisji na poziome komunikatów.
Dodatkowo właściwość clientCredentialType ustawiamy na UserName.

      <wsHttpBinding>
        <binding name="WSHttpBindingCalculatorService">
          <security mode="Message">
            <message clientCredentialType="UserName" />
          </security>
        </binding>
      </wsHttpBinding>

Następnie w serwice behaviors definiujemy sekcje serviceCredentials, gdzie ustawiamy userNameAuthentication i określamy, że chcemy sami dostarczyć metodę do walidacji loginu i hasła.
W metodzie tej zaimplementujemy logikę, w której sprawdzimy czy podany login i hasło zgadzają się.
Ustawiamy tutaj również serviceCertificate.

      <serviceBehaviors>        
        <behavior name="CalculatorBehavior">
          <serviceMetadata httpGetEnabled="true" />
          <serviceCredentials>
            <userNameAuthentication userNamePasswordValidationMode="Custom"
              customUserNamePasswordValidatorType="CalculatorServiceLibrary.CredentialsValidator, CalculatorServiceLibrary" />
            <serviceCertificate findValue="MyComp" storeLocation="LocalMachine" storeName="TrustedPeople" x509FindType="FindBySubjectName"/>
          </serviceCredentials>
        </behavior>
      </serviceBehaviors>

Metoda do walidacji sprowadza się do zaimplementowanie metody Validate z abstrakcyjnej klasy UserNamePasswordValidator.

 public class CredentialsValidator : UserNamePasswordValidator { public override void Validate(string userName, string password) { if (string.IsNullOrEmpty(userName) || string.IsNullOrEmpty(password)) throw new SecurityTokenException("Username and password required"); if (!IsCredentialValid(userName, password)) { throw new FaultException("Wrong username or password "); } }…

View original post 51 słów więcej

Posted 13 Maj 2012 by marekwmsdn in Bez kategorii

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Log Out / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Log Out / Zmień )

Facebook photo

Komentujesz korzystając z konta Facebook. Log Out / Zmień )

Google+ photo

Komentujesz korzystając z konta Google+. Log Out / Zmień )

Connecting to %s

%d bloggers like this: