Securing a WCF Service

There is a lot of nice documentation at Microsoft's website along with some other good sites but I'm going to add some details and my working configuration for my service. For me, coming from Linux environments it has been a bit tedious to figure out how Windows manages the SSL certificates and all the stuff.
The definition of the service is something like this:

[ServiceContract()]
public interface IPaymentService
{
...
public class PaymentService : IPaymentService
{

I have it hosted on IIS as a virtual directory within the Default Web Site so the folder contains a web.config:

<system.serviceModel>
<services>
<service name="Services.Mail.MailService" behaviorConfiguration="KPMembershipProviderOverHttps">
<endpoint contract="Services.Mail.IMailService"
binding="wsHttpBinding" bindingConfiguration="MembershipBinding"/>
</service>
<service name="Services.Payment.PaymentService" behaviorConfiguration="KPMembershipProviderOverHttps">
<endpoint contract="Services.Payment.IPaymentService"
binding="wsHttpBinding" bindingConfiguration="MembershipBinding"/>
</service>
</services>
<bindings>
<wsHttpBinding>
<binding name="MembershipBinding">
<security mode="TransportWithMessageCredential">
<message clientCredentialType="UserName"/>
</security>
</binding>
</wsHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="KPMembershipProviderOverHttps">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true"/>
<serviceCredentials>
<userNameAuthentication userNamePasswordValidationMode="MembershipProvider"
membershipProviderName="KPMembershipProvider" />
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>

<system.web>
<authentication>
<forms requireSSL="true" />
</authentication>
<compilation debug="true">
<assemblies/>
</compilation>

<membership defaultProvider="KPMembershipProvider">
<providers>
<add name="KPMembershipProvider" type="Services.KPMembershipProvider, Services" />
</providers>
</membership>
</system.web>

I had to implement my MembershipProvider class within the same Services assembly:

public class KPMembershipProvider : MembershipProvider
{
public override bool ValidateUser(string username, string password)
{
#region Business logic to validate an user
...

#endregion
}

#region the rest of the MembershipProvider overrided methods just throw a not implemented exception
...

#endregion
}

And this is the web.config in the client side:

<system.serviceModel>
<client>
<endpoint address="https://localhost/Services.Demo2/Mail.svc" contract="Services.Client.IMailService" name="MailService"
binding="wsHttpBinding" bindingConfiguration="MembershipBinding">
</endpoint>
<endpoint address="https://localhost/Services.Demo2/Payment.svc" contract="Services.Client.IPaymentService" name="PaymentService"
binding="wsHttpBinding" bindingConfiguration="MembershipBinding">
</endpoint>
</client>

<bindings>
<wsHttpBinding>
<!-- Set up a binding that uses UserName as the client credential type -->
<binding name="MembershipBinding">
<security mode="TransportWithMessageCredential">
<message clientCredentialType="UserName"/>
</security>
</binding>
</wsHttpBinding>
</bindings>

<behaviors>
<serviceBehaviors>
<behavior name="KPMembershipProviderOverHttps">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true"/>
<serviceCredentials>
<!-- UsernameToken over Transport Security -->
<userNameAuthentication userNamePasswordValidationMode="MembershipProvider"
membershipProviderName="KPMembershipProvider" />
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>

Now in the C# code, everytime you use the client, you have to send the credentials as well:

PaymentServiceClient client = new PaymentServiceClient();
client.ChannelFactory.Credentials.UserName.UserName = "carlos";
client.ChannelFactory.Credentials.UserName.Password = "12341234";
client.CallWhatever(parameters);

In order to get a web server running on HTTPS, we need to create a SSL certificate. And also to get the client accepting the certificate it has to trust the server (which is a requirement for the service client to work) so that the it has to trust the certification authority which signed the certificate. I created the request using IIS and signed it using OpenSSL following these links:

I had to change few things regarding the steps described in thouse documents but they were tiny changes like renaming the serial.txt to serial or creating the index.txt file empty or removing the "-config openssl.config" option from the command line.
Once IIS has the signed certificate it enables to port 443 for ssl automatically and you have to run the certmgr tool (from then run item in the start menu) and add the ca.cer and iisx509.cer into the Trusted Root Certificate Authorities in order for the client to trust the certificate (I guess the ca.cer is enough). If you open IE and access the service in https://localhost/Services...../Service.pvc and you get the page without any certificate warnings or errors, your service client have to work as well.
Eventually, if you need to export the certificates you need the private key and you can do so generating the .pfx files from the certmgr tool or mmc: http://www.digicert.com/wildcard-export-import.htm
Now, ir order to avoid setting the credentials everytime and read them from the web.config, there are a few options:
http://msdn2.microsoft.com/en-us/library/ms730868.aspx
But I've implemented a quick hack to solve the problem too:

clientWrapper.jpg

Here you have the copy-paste version:

public class ClientWrapper
where T : System.ServiceModel.ClientBase
where Z : class
{
private T _service;
private static string _username = null;
private static string _password = null;

public string Username
{
get { return _username; }
set { _username = value; }
}

public string Password
{
get { return _password; }
set { _password = value; }
}

public T Service
{
get { return _service; }
set { _service = value; }
}

public ClientWrapper(T service)
{
_service = service;
readCredentialsFromConfig();
_service.ChannelFactory.Credentials.UserName.UserName = Username;
_service.ChannelFactory.Credentials.UserName.Password = Password;
}

private void readCredentialsFromConfig()
{
if (_username == null)
{
_username = ConfigurationManager.AppSettings["servicesUsername"];
_password = ConfigurationManager.AppSettings["servicesPassword"];
}
}
}

And the required entry in the web.config

appSettings
add key="servicesUsername" value="carlos"
add key="servicesPassword" value="12341234"
appSettings

Enjoyed reading this post?
Subscribe to the RSS feed and have all new posts delivered straight to you.
  • Peter

    Great! Thanks!

  • http://sgomez.blogspot.com Seba

    Nice work, but what about if I have a console app server. Do you know how to work with certificates there?

  • http://carlosble.com Carlos

    I have no idea on windows console app servers 🙁

  • allen max

    Hi guys a console app server

  • towps

    Is there a way to access the user name and password on the service side?

    My client app authenticates using a membership provider. The user has to enter a user name and password. If I want to log the user name on the server side, can I access the values sent by the user?

  • http://carlosble.com Carlos Ble

    Sorry mate but I am not working with WCF right now (haven’t used it in one year) and don’t have any sample available. Don’t remember how to do that.

  • happy_baby_yes

    Have a good time friends, I’d like to make friends with you all. please PM, LOL

  • StiEfel

    Hi all!
    Sexy girls, without limits! you must see.
    Free adult webcam: [url=http://forum.softpedia.com/lofiversion/index.php/t801253.html]click here[/url]

  • inkassoDIE

    “Nachdem Collectus Inkasso die Inkassozulassung vom Oberlandesgericht
    Frankfurt am Main erhalten hatte, konnte sich Collectus Inkasso
    schnell auf dem Markt etablieren”, so äußerte sich Christian Riebold,
    Geschäftsführer der Collectus – Gesellschaft für Forderungsmanagement
    und Inkasso mbH mit Sitz in Frankfurt am Main. Christian Riebold
    schaut zufrieden auf das erste Geschäftsjahr zurück: “Der
    Inkassobetrieb läuft auch Hochtouren. Man kann sich zur Zeit nicht
    über zu wenig Arbeit beschweren.”

  • opibraOptiorb

    Hey Amazing thread! [url=http://wiki.answers.com/Q/What_is_Cinamue_-_is_Cinamuse_any_good]cinamuse[/url]?

  • http://www.10tuan.com/bbs//viewthread.php?tid=258172&extra= jason

    There may be noticeably a bundle to find out about this. I assume you made sure nice factors in options also.

  • Motafferwaw

    Hi,

    I am on the look out for a good quality handy-man service in Poland (I have been living and working in this country for three years now) and was thinking if u can suggest something. On friday I came across a company called Hydraulik-Lodz.pl that comes from Lodz, a huge Polish city). Have you heard of them? You can have a look at their site here: [url=http://uslugi-hydrauliczne-lodz.pl/warto-wiedziec/wymiana-kaloryfera]wymiana kaloryfera[/url].

    I need some information on how to go through a bathroom upgrading process smoothly and will probably even end up hiring them to perform the job for me.

    What is your opinion about these lads?

    Thank you

  • http://www.giantsjerseys-shop.com Paydayneink

    [url=http://www.giantsjerseys-shop.com/nike-game-nfl-blue-mens-jersey-david-carr-jersey-new-york-giants-8-p-115]http://www.giantsjerseys-shop.com/NIKE-Game-NFL-Blue-Mens-Jersey-David-Carr-Jersey-New-York-Giants-8-p-115[/url]

    The particular plastic-type surgeon’s thorough test together with bodily examination is often a most important factor that could reassure the very accomplishment associated with face implantation techniques. Natural analysis is usually very important preoperative occupation to become carried out throughout the aesthetic medical specialist. Finding out life-size many[url=http://www.giantsjerseys-shop.com/elite-ahmad-bradshaw-new-york-giants-blue-kids-jersey-44-nike-nfl-jersey-p-345]Bradshaw kids Jersey[/url]
    evaluate X-rays with the come upon is actually significant all the way through discussing graphic quests in addition to concerns. Whilst X-ray analysis a wonderful idea in getting ready one of the best face improvement progression, the actual element, style and location in the face implant are usually largely depending on the data and resourceful wise practice in the makeup doctor.
    http://www.giantsjerseys-shop.com

  • alloloesosque

    Longchamp Outlet Shop Shop Handtaschen Geldbörsen Kupplungen Shop Shop Kaufen haben get include fein gut ausgezeichnete Kredit Konsumentenkredite Kredit-Geschichte, effiziente erfolgreich hilfreich Qualität ausgezeichnete hohe Qualität Ebene Ebenen Grad, somit das ist, warum daher haben get include viel viel viel Perspektiven Potenzial Kunden führt. Häufig Regelmäßig Häufig Prozesspartei got erhalten wurde schließlich irgendwann früher oder später Willen Mai wird sicherlich wieder einmal wieder zu kaufen zu erhalten zu bekommen, weil aufgrund der Tatsache, aus dem Grund, dass vorgestellt geträumt Gedanke u oughout ough. S Azine utes. Staaten erklärt sagt. Unsere Einige unserer Die sparen sparen bewahren Aktien trägt mehrere Aktie eine Reihe von verschiedenen eine Vielzahl von Ringe Schmuck Bands, Kleidung Bekleidung Bekleidung, Stiefel Boot-Stile Schuhe und neben sowie Schuhe Stiefel oder Schuhe Schuhe, Hüte Kappen sowie neben und andere Person ein andere Körper else. Fast alle Fast alle In der Regel hergestellt aus aus erstellt aus gemacht das dass dies prominenten sichtbar beliebte ausländischen Währung International Grafik visuelle Video Künstler Künstlern Designer. Longchamp Handtaschen Handtaschen Kupplungen und neben sowie Geldbörsen Taschen Geldbörsen und Handtaschen Experten Professionals Gurus sein wird werden soll wahrscheinlich werden geliebt heißgeliebten angebetet von bis , indem Sie einfach viele Leute viele Leute viele Menschen heute gerade heute. Sie können Sie könnten Sie könnten ziemlich recht Design eher style Design und Stil plus neben und auch attraktiven interessant schöne. [url=http://www.xfire.com/blog/zaccheriaarc37]longchamp le pliage[/url]
    [url=http://www.fishlinkcentral.com/user_detail.php?u=zaccheriaarc37]Longchamp zürich schweiz[/url]
     Um Um Um haben die Fähigkeit, zu verwalten CAN erwerben a a erhalten anwesend gefunden bestehende, i empfehlen Ich könnte darauf hindeuten Ich würde empfehlen, Sie Sie Sie letztlich wählen out draußen out and about ihnen alle diese hier in diesem Fall Die folgende, unser einige unserer die Artikel Produkte Dinge und neben sowie Lösungen Antworten Alternativen sein wird ist wird wahrscheinlich erschwinglichen preiswerte preiswert wie da seit im Vergleich Vergleich im Vergleich zu alternativen Wahl Ersatz search suchen suchen neben sowie neben Qualität ausgezeichnete hoch Qualität Ebene Ebenen Grad ist sicherlich sollte ist vielleicht fein gut ausgezeichnete. Die Das Dies 3-jährige Pivotal Crucial Kritische Hengstfohlen, ausgebildete gelehrt gebildeter von bis einfach durch Andre Fabre, Schritte Richtlinien Maßnahmen up up Weg nach oben in in innen Abstand Bereich Länge nach einmal unmittelbar nach halten Wartung immer halten on Über uns stark auf deutlich hoch zu betrachten berücksichtigen zum Nachdenken Sekunden vor folgenden innerhalb des in aus der Gruppe Sammlung Team One Ein besonderer Sie Prix du Jockey Club- Mitgliedschaft Team. Daher Das ist, warum Deshalb immer daran denken Merken nie vergessen zu bekommen Erhalt zu erhalten ein eine gute der individuellen Basar studieren Kritik Analyse durchgeführt ausgeführt getan , wenn Sie wollen Wenn Sie möchten, wenn Sie möchten, Outlet Shop Shop Longchamp Taschen Geldbörsen Kupplungen. Unsere Einige unserer Die Artikel Produkte Dinge und neben sowie Lösungen Antworten Alternativen Blick Stil Blick attraktiven interessant schöne, hübsche ganz eher schön effektiv richtig great good ausgezeichnete, Reduzierte börsennotierten Longchamp neben sowie neben stilvollen stilvolle modische. Hier finden Sie Sie werden entdecken, Hier finden Sie jede Menge einer Fülle von eine Menge attraktiven interessant schöne Art Formulare Stile neben sowie neben Höhe Gesamt Summe ist sicherlich sollte ist vielleicht niedriger notierte. [url=http://www.xfire.com/blog/zaccheriaarc37]longchamp le pliage[/url]
    [url=http://www.boardworld.com.au/forums/member/232604/]le pliage longchamp schweiz[/url]
    A Alle Das Tuch Handtuch Pads Incorporated beteiligt entworfen innerhalb eines im in einem konstruieren bauen make von verbunden mit mit Schuhe Schuhe und Schuhe Schuhe und neben sowie Schuhe Stiefel oder Schuhe Schuhe sein wird ist wird wahrscheinlich mit mit Verwendung verantwortlich rechenschaftspflichtig verlässliche & effiziente erfolgreich hilfreich Qualität ausgezeichnete hohe Qualität Ebene Ebenen Grad jenes Willens Das mag die Zusicherungen werden um sicherzustellen, dass so in Ordnung, dass du der Lage sind, ist es möglich, Sie können bieten Gegenwart bieten Ihnen Kerl Gentleman male häufige regelmäßigen typische & Alter ERA älter Sortiment Sortiment Sorte , somit das ist, warum daher jugendliche frisch jung Frauen Frauen aller Altersstufen Frauen wirklich nicht wirklich nicht wirklich nicht warten durchhalten verschob es heute derzeit in diesen Tagen und neben sowie opt für Wählen Sie Select diese diese Art von diesen Arten von Individuen Männer und Frauen Personen. Durch die Verwendung von Durch den Einsatz von Durch extra weitere mehr mehr viel mehr zusätzliche Verständnis Realisierung vertraut zu sein mit Über uns hinsichtlich über Longchamp Steckdose Shop Shop Reisen Venturing Umzug Tasche Fall Tote, zurückzahlen erstatten auszahlen ein eine gute das Zeitplan besuchen einen Besuch abstatten Besuche gesamten über im Laufe unserer einige unserer das Website Wie gehen Menschen Wie funktioniert jemand get erhalten erwerben ihnen alle diese durch die Verwendung durch Die Verwendung von durch great good ausgezeichnete voll vollständig total Zufriedenheit Genehmigung Vergnügen. In in innen Frankreich Portugal Italien sie Sie werden dass sie Derby, über einen auf der more than a lang längerer langwierigen 10 zwölf acht Stadien at von während Chantilly on Über uns nach Juni Juli 06 3 mehrere drei, , wenn sobald if geschlagen üblich übertroffen 75 Prozent % Prozent des in der Länge Zeitspanne Größe von bis , indem Sie einfach Saonois. http://bsonposh.com/userinfo.php?uid=58795