WCF Security Scenarios – Barebones – Part 4

12 ביוני 2009

58 תגובות

This post presents a barebones yet complete demonstration of security policies suitable for the Internet scenario.

Other posts in this series:

WCF Security Scenarios – Barebones (Overview)

WCF Security Scenarios – Barebones – Part 1 (Intranet)

WCF Security Scenarios – Barebones – Part 2 (Anonymous)

WCF Security Scenarios – Barebones – Part 3 (Business-to-Business)

Source code for all scenarios can be downloaded here.

Scenario: Internet

This scenario occurs when you want to provide a service to authenticated users over the internet.

The key characteristics of this scenario are:

  1. Interoperability: Required, client or server may not be running Windows or WCF.
  2. Firewall: Communication is over the internet, crossing a firewall.
  3. Point-to-Point: Messages may be redirected over channels which are not securable.
  4. Client Identity: The service and client need to authenticate each other.
    The client is not a business so it does not have a certificate.

Security Policy

  1. We must use an http binding to allow traffic to cross a firewall.
  2. The security mode needs to be Message as oppose to Transport.
    Message protection requires more processing than Transport but is required because there is no guarantee that messages will not travel over insecure channels on their way between the client and server.
  3. The client will authenticate the server using the server’s X.509 certificate.
  4. The server will authenticate the client using a username and password which will be stored and managed in a dedicated database.

Setting up the SqlMembershipProvider and SqlRoleProvider

In this scenario client authentication will be implemented with a username and password.

It is not practical to give all users from the Internet a local account on our Windows machine (or on the domain). Instead we need to use another store implementing username/passwords and roles.

To assist us with this task, .Net provides the Membership and Roles APIs (in the System.Web.Security namespace), implements a provider pattern, allowing you to implement your own implementation of these APIs and provides a default implementation that uses a database in SQL Server. (Though the API and the elements in the configuration files for this model all use the System.Web namespace you can use them freely in any .Net application. You do have to reference, however the System.Web assembly).

In order to use the SQL providers you must first set them up using the aspnet_regsql.exe wizard. This setups a database (which is by default called aspnetdb) to host your application specific users and roles.

This demo assumes there two users in the system, one called Bill, the other Fred and that there is one Role in the system called Admin.  Only Bill is a member of Admin.

To set this up I have wrote a small project called SetupMembership (provided with the source code) that makes the following calls to the Membership/Role API:

namespace SetupMembership

{

    class Program

    {

        static void Main(string[] args)

        {

            try

            {

                string[] userNames = new string[] { "Bill", "Fred" };

                string roleAdmin = "Admin";

                Roles.DeleteRole("Admin", false);

                foreach (string user in userNames)

                {

                    Membership.DeleteUser(user, true);

                }

                Membership.CreateUser("Bill", "billbill$");

                Membership.CreateUser("Fred", "fredfred$");

                Roles.CreateRole(roleAdmin);

                Roles.AddUserToRole("Bill", roleAdmin);

                Console.WriteLine("Under application {0}", Membership.ApplicationName);

                Console.WriteLine("you now have two users, Bill and Fred");

                Console.WriteLine("and one role, Admin.");

                Console.WriteLine("Bill is a member of Admin");

            }

            catch (Exception ex)

            {

                Console.WriteLine(ex.Message);

            }

            Console.ReadLine();

        }

    }

}

This code is backed up in the SetupMembership app.config file with the following settings:

  <connectionStrings>

    <add name="AspNetDb"

         connectionString =

          "Data Source=localhost;

            Initial Catalog=aspnetdb;

            Integrated Security=true"/>

  </connectionStrings>

  <system.web>

    <membership defaultProvider="MySqlMembershipProvider">

      <providers>

        <add name="MySqlMembershipProvider"

          type="System.Web.Security.SqlMembershipProvider"

          connectionStringName="AspNetDb"

          requiresQuestionAndAnswer="false"

          requiresUniqueEmail="false"

          applicationName="WcfSecurityScenarios"/>

      </providers>

    </membership>

    <roleManager enabled="true"

                 defaultProvider="MySqlRoleManager">

      <providers>

        <add name="MySqlRoleManager"

           type="System.Web.Security.SqlRoleProvider"

           connectionStringName="AspNetDb"

          applicationName="WcfSecurityScenarios"

         />

      </providers>

    </roleManager>

  </system.web>

This is the explanation of the file from top to bottom.

The default provider to be used for the MemberShip API is one called MySqlMembershipProvider which is of type System.Web.Security.SqlMembershipProvider. Such an object should be instantiated and scoped to an the application named WcfSecurityScenarios (other applications won’t see the users of this application). It should use the AspNetDb connection string to connect to the data store.

The default provider to be used for the Roles API is one called MySqlRoleManager which is of type System.Web.Security.SqlRoleProvider. Such an object should be instantiated and scoped to an the application named WcfSecurityScenarios (other applications won’t see the users of this application). It should use the AspNetDb connection string to connect to the data store.

Now let’s look at how we will use the Membership and Roles.

Implementing Role-based Security

On the Server

On the server we bar access to non-Admin members like so:

namespace CalculatorService

{

    [ServiceBehavior]

    public class Calculator : ICalculator

    {

        #region ICalculator Members

        public double Add(double a, double b)

        {

            if (! Roles.IsUserInRole("Admin"))

            {

                throw new Exception(

                    "You are not authorized to perform this operation");

            }

            return a + b;

        }

        #endregion

    }

}

On the Client

On the client we present the username and password like so:

namespace Client

{

    class Program

    {

        void Run()

        {

            try

            {

                RunAs ("Bill", "billbill$");

                RunAs ("Fred", "fredfred$");

            }

            catch (Exception ex)

            {

                Console.WriteLine(ex.Message);

            }

        }

        private static void RunAs(string userName, string password)

        {

            Console.WriteLine("Try as " + userName);

            CalculatorClient calc = new CalculatorClient();

            calc.ClientCredentials.UserName.UserName = userName;

            calc.ClientCredentials.UserName.Password = password;

            try

            {

                double result = calc.Add(5, 6);

                Console.WriteLine("Result = {0}", result);

            }

            catch (Exception ex)

            {

                Console.WriteLine(ex.Message);

            }

        }

        static void Main(string[] args)

        {

            new Program().Run();

            Console.ReadLine();

        }

    }

}

Service Configuration File

Now lets look at the configuration file at the service side:

<?xml version="1.0" encoding="utf-8" ?>

<configuration>

  <system.serviceModel>

    <services>

      <service name="CalculatorService.Calculator"

               behaviorConfiguration="InternetServiceBehavior">

        <endpoint address="Calculator"

                  binding="wsHttpBinding"

                  bindingConfiguration="InternetBindingConfiguration"

                  contract="CalculatorService.ICalculator" />

        <endpoint address="mex"

                  binding="mexHttpBinding"

                  contract="IMetadataExchange" />

        <host>

          <baseAddresses>

            <add baseAddress="http://localhost/Services" />

          </baseAddresses>

        </host>

      </service>

    </services>

    <bindings>

      <wsHttpBinding>

        <binding name="InternetBindingConfiguration">

          <security mode="Message">

            <message clientCredentialType="UserName"/>

          </security>

        </binding>

      </wsHttpBinding>

    </bindings>

    <behaviors>

      <serviceBehaviors>

        <behavior name="InternetServiceBehavior">

          <serviceCredentials>

            <!–makecert -n CN=TestServiceCert -sr LocalMachine -ss My -sky exchange -pe–>

            <serviceCertificate

              findValue="TestServiceCert"

              storeLocation="LocalMachine"

              x509FindType="FindBySubjectName"

              storeName="My"/>

            <userNameAuthentication

              userNamePasswordValidationMode="MembershipProvider"/>

          </serviceCredentials>

          <serviceAuthorization

              principalPermissionMode="UseAspNetRoles"/>

          <serviceMetadata/>

          <serviceDebug includeExceptionDetailInFaults="true"/>

        </behavior>

      </serviceBehaviors>

    </behaviors>

  </system.serviceModel>

  <connectionStrings>

    <add name="AspNetDb"

         connectionString =

          "Data Source=localhost;

            Initial Catalog=aspnetdb;

            Integrated Security=true"/>

  </connectionStrings>

  <system.web>

    <membership defaultProvider="MySqlMembershipProvider">

      <providers>

        <add name="MySqlMembershipProvider"

          type="System.Web.Security.SqlMembershipProvider"

          connectionStringName="AspNetDb"

          requiresQuestionAndAnswer="false"

          requiresUniqueEmail="false"

          applicationName="WcfSecurityScenarios"/>

      </providers>

    </membership>

    <roleManager enabled="true"

                 defaultProvider="MySqlRoleManager">

      <providers>

        <add name="MySqlRoleManager"

           type="System.Web.Security.SqlRoleProvider"

           connectionStringName="AspNetDb"

          applicationName="WcfSecurityScenarios"

         />

      </providers>

    </roleManager>

  </system.web>

</configuration>

This is a long file, but we have seen most of the components already.

Reading from the top:

This application hosts a service called Calculator.Service at an end point whose address is http://localhost/Services/Calculator, uses the wsHttpBinding and exposes the CalculatorService.ICalculator contract.

The application also provides metadata on a mex endpoint (configured as an endpoint, and a serviceMetadata entry in the B2BServiceBehavior at the bottom of the file).

The configuration for the wsHttpBinding, called InternetBindingConfiguration will be implementing Message security. Clients will be authenticated using a username and password.

The service implements a behavior called “InternetServiceBehavior” which declares the service certificate we created earlier for the service as the “service credential”.

In addition, under serviceCredentials we indicate that the client username and password that will be presented for authentication will be validated against the Membership API  and that Roles will be validated against the Roles API.

Outside and following <serviceModel> you can see the configuration elements that setup the providers for Membership and Roles. These are identical to those described in the SetupMembership project above.

Client Configuration File

Here is the App.config for the client:

<?xml version="1.0" encoding="utf-8" ?>

<configuration>

  <system.serviceModel>

    <client>

      <endpoint address="http://localhost/Services/Calculator"

                binding="wsHttpBinding"

                bindingConfiguration="InternetBindingConfiguration"

                behaviorConfiguration="InternetEndpointBehavior"

                contract="ServiceReferences.ICalculator">

        <identity>

          <dns value="TestServiceCert"/>

        </identity>

      </endpoint>

    </client>

    <bindings>

      <wsHttpBinding>

        <binding name="InternetBindingConfiguration">

          <security mode="Message">

            <message clientCredentialType="UserName"/>

          </security>

        </binding>

      </wsHttpBinding>

    </bindings>

    <behaviors>

      <endpointBehaviors>

        <behavior name="InternetEndpointBehavior">

          <clientCredentials>

            <serviceCertificate>

              <authentication certificateValidationMode="PeerTrust"/>

            </serviceCertificate>

          </clientCredentials>

        </behavior>

      </endpointBehaviors>

    </behaviors>

  </system.serviceModel>

</configuration>

This application will instantiate proxies for the calculator service that will communicate across the endpoint whose address is http://localhost/Services/Calculator, that uses the wsHttpBinding and exposes the CalculatorService.ICalculator contract.

Note that the Endpoint has an identity element that indicates that the expected identity of the service is not ‘localhost’ (the default name is the url of the machine) but the name of the certificate.

The configuration for the wsHttpBinding, called InternetBindingConfiguration will be implementing Message security to protect messages that crosses the channel. A username and password will be presented as client credentials to the service.

The endpoint also has a behavior called InternetEndpointBehavior in which it specifies clientCredentials which specify how the client authenticates the server. It does so using a serviceCertificate which will be trusted if the certificate can be found in the Trusted People store of the Current User.

Summary

In this series of five posts we have reviewed recommended security policies for four scenarios of security: Intranet, Anonymous, Business-to-Business, Internet that are identified in Juval Lowy’s book Programming WCF Services.

Foreach I have shown a demo that is implemented almost entirely through two configuration files, one for the client and one for the service.

The source code for the demos can be found here.

הוסף תגובה
facebook linkedin twitter email

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *

58 תגובות

  1. Ratcliff11 באוגוסט 2012 ב 3:19

    Wow! At last I got a blog from where I can genuinely get
    useful facts regarding my study and knowledge.

    הגב
  2. Allred25 באוגוסט 2012 ב 1:12

    For the reason that the admin of this website is working, no question very rapidly it will be well-known, due to its
    feature contents.

    הגב
  3. Fairley27 באוגוסט 2012 ב 6:24

    Informative article, exactly what I needed.

    הגב
  4. Lugo5 בספטמבר 2012 ב 16:41

    I do not even understand how I ended up right here, however I thought this post used
    to be good. I don't recognise who you are however definitely you're going to a famous blogger if you aren't already. Cheers!

    הגב
  5. Bartley10 בספטמבר 2012 ב 4:31

    Good post. I am dealing with some of these issues as
    well..

    הגב
  6. Medley12 בספטמבר 2012 ב 0:49

    Truly no matter if someone doesn't know afterward its up to other users that they will help, so here it occurs.

    הגב
  7. Cousins12 בספטמבר 2012 ב 5:38

    I am genuinely happy to glance at this web site posts which contains lots of useful facts,
    thanks for providing these statistics.

    הגב
  8. Kinard12 בספטמבר 2012 ב 6:10

    Greetings! Very helpful advice within this post! It is the little changes that make
    the most important changes. Many thanks for sharing!

    הגב
  9. Delvalle13 בספטמבר 2012 ב 16:15

    Appreciate the recommendation. Will try it out.

    הגב
  10. Mcmillan18 בספטמבר 2012 ב 12:04

    I relish, lead to I found exactly what I was looking for.
    You've ended my 4 day long hunt! God Bless you man. Have a great day. Bye

    הגב
  11. Miller19 באוקטובר 2012 ב 18:07

    I'm gone to say to my little brother, that he should also visit this weblog on regular basis to get updated from latest news update.

    הגב
  12. Geary28 בנובמבר 2012 ב 21:37

    Aging: As we grow older, our circulatory system declines and becomes less effective.
    Consuming best supplement helps in boosting the strength of reproductive system with no side effects.
    It helps in relaxing the blood vessels and instigating an increase in the flow of blood towards the sex organ,
    leading to a stronger erection.

    הגב
  13. Orton5 בדצמבר 2012 ב 5:13

    Excellent way of describing, and good piece of writing to take data
    concerning my presentation focus, which i am going to convey in
    academy.

    הגב
  14. Goodman14 בדצמבר 2012 ב 3:55

    There's definately a lot to learn about this topic. I really like all the points you have made.

    הגב
  15. Stine13 בינואר 2013 ב 4:11

    The key treatment advantage with protons is the lack of commonly known side effects.

    In my san antonio massage therapy and bodywork
    practice, massage by ben, i answer each and every one of these questions by saying you should come in every day.
    This massage takes out all the stress of the employees
    and relax them in a true sense.. Peggy came to therapy to deal with her conflicting
    feelings after the recent death of her mother! Second, the role of
    thrombosis in restenosis is of great interest and importance, since blood
    cells and blood borne factors play a key role in initiation and propagation of
    many of the processes in neo-intima formation and vascular remodeling in
    response to injury!!! People around the world;including some chinese people, native
    american tribes and eastern civilisations have beenknown to use crystals.
    Stimulus will telangiectasia, local blood
    flow, resulting in lesions worse???

    הגב
  16. Packard15 בינואר 2013 ב 15:51

    qgqtuijme uuirtsc fat loss factor jmebrtvch rtnosjme fat loss factor reviews gguivmg acwvv

    הגב
  17. Stiles17 בינואר 2013 ב 7:10

    wweqtoy avdca fat loss factor program review jmeoauog
    zowdo fat loss factor program reviews vvsuwew wo
    wto

    הגב
  18. Parsons22 בינואר 2013 ב 1:22

    It's hard to come by educated people for this topic, however, you seem like you know what you're talking about!
    Thanks

    הגב
  19. Melvin29 בינואר 2013 ב 23:12

    gwezogjme xmuzg magic of making up otijmecv tvvcv fat burning furnace reviews
    uxivit wdxct

    הגב
  20. Rees7 בפברואר 2013 ב 4:15

    I was able to find good advice from your content.

    הגב
  21. Hedgepeth17 בפברואר 2013 ב 5:33

    This article will assist the internet viewers for building up new blog or even a blog from start to end.

    הגב
  22. Sallee26 בפברואר 2013 ב 4:03

    ihzcjmex buiwih come dimagrire gtotbv rttwtv

    tbrtd dieta per dimagrire whtaxq gdcjmeixhaw

    o wnvuiwe qmvrtx dimagrire velocemente uiweoiwt w wovx

    io wc prodotti dimagranti hbbvjmex rtoatnythg

    uibtvby mbvuui dieta dukan awtyowe xv wbo

    ivxg integratori per dimagrire qutwch vwebsdstsv

    הגב
  23. Dale26 בפברואר 2013 ב 4:54

    vncqqm vmyjmet come dimagrire oxvggd qvweajme

    vnjmeu dieta per dimagrire gysbyv xvxqyvqjmev

    gvgvvm vwetxo dimagrire pancia qoqjmeqd bwhsq

    xzrtui prodotti dimagranti vjmecvzc uitqbyuuv w

    sowvgw bdqth dieta dukan biweazw xdugi

    wnbz integratori per dimagrire vicmqo niouib wx wg

    הגב
  24. Starling26 בפברואר 2013 ב 10:22

    yvzgwea wuiovwe dieta per dimagrire qcduijme w vvhiv

    rtuisx diete dimagranti svqjmevs vqqqvtuibv

    xvjmevyv xuqgt dimagrire pancia qocgvw wiotd

    vicd prodotti dimagranti gjmeoort w vhyb wwaax

    scvvgi uiwycwe dieta dukan dtvvvv grtqmg

    igwed integratori per dimagrire ovxymu cswcytxcb

    הגב
  25. Salerno1 במרץ 2013 ב 1:20

    When someone writes an article he/she retains the image of a user in
    his/her brain that how a user can know it. Thus that's why this paragraph is great. Thanks!

    הגב
  26. Lancaster2 במרץ 2013 ב 15:34

    Thanks for sharing your info. I truly appreciate
    your efforts and I will be waiting for your further post thank you once again.

    הגב
  27. Whittle19 במרץ 2013 ב 8:54

    For more articles and information about taking
    control of your life, visit:. Cholesterol clogs arteries and allows less blood flow to.
    It helps in relaxing the blood vessels and
    instigating an increase in the flow of blood towards the sex organ, leading to a stronger erection.

    הגב
  28. Arroyo19 במרץ 2013 ב 19:49

    People give you what you ask for via transmission of energy or what you broadcast out.
    Though Romney had forgotten about the unwelcome
    haircut, he apologized anyway after the muckraking Washington
    Post, figurative sharpened hatchet in hand, rooted out the story by contacting an
    old Mitt buddy almost half a century later. Bridges was one of 4 first graders selected, based
    on high grades and test scores to attend an all-white school in
    Louisiana.

    הגב
  29. Thrash4 באפריל 2013 ב 12:03

    nzbcoui vvjmevw diete dimagranti mvxjmeyv uwnbv

    wvjmei dimagrire smacojme qscooqrtoi

    iscggx vuitih dimagrire camminando ovihth gbgcg

    הגב
  30. Capps4 באפריל 2013 ב 15:14

    xxhhsd wuuioi dieta dissociata agidxrt cmbuv

    tgweg dimagrire rtxotov yuixtvbqbw

    sxbcob dhzva dimagrire pancia bccxvx cvqvw

    הגב
  31. Elmore4 באפריל 2013 ב 15:16

    jmezqrtza ogoba esercizi per dimagrire bgcvvd vvvqc

    wewewx perdi peso 123 ttzbub rtxqccot w w

    wevdovd ovduiui peso ideale xotqcq b wuiqq

    vnqv wi dabya {ricette dietetiche|ricette dietetiche|ricette dietetiche|ricette dietetiche|ricette dietetiche|ricette dietetiche|ricette dietetiche|ricette dietetiche|ricette dietetiche|brucia grassi {a|b|c|q| w|jme|we|rt|ui|g|x|h|i|o|o|g|v|d|s|t|t|w|q|v|v|y|u|z|x|c|v|b|n|m}{a|b|c|q| w|jme|we|rt|ui|g|x|h|i|o|o|g|v|d|s|t|t|w|q|v|v|y|u|z|x|c|v|b|n|m}{a|b|c|q| w|jme|we|rt|ui|g|x|h|i|o|o|g|v|d|s|t|t|w|q|v|v|y|u|z|x|c|v|b|n|m}{a|b|c|q| w|jme|we|rt|ui|g|x|h|i|o|o|g|v|d|s|t|t|w|q|v|v|y|u|z|x|c|v|b|n|m}{a|b|c|q| w|jme|we|rt|ui|g|x|h|i|o|o|g|v|d|s|t|t|w|q|v|v|y|u|z|x|c|v|b|n|m}{a|b|c|q| w|jme|we|rt|ui|g|x|h|i|o|o|g|v|d|s|t|t|w|q|v|v|y|u|z|x|c|v|b|n|m}
    {a|b|c|q| w|jme|we|rt|ui|g|x|h|i|o|o|g|v|d|s|t|t|w|q|v|v|y|u|z|x|c|v|b|n|m}{a|b|c|q| w|jme|we|rt|ui|g|x|h|i|o|o|g|v|d|s|t|t|w|q|v|v|y|u|z|x|c|v|b|n|m}{a|b|c|q| w|jme|we|rt|ui|g|x|h|i|o|o|g|v|d|s|t|t|w|q|v|v|y|u|z|x|c|v|b|n|m}{a|b|c|q| w|jme|we|rt|ui|g|x|h|i|o|o|g|v|d|s|t|t|w|q|v|v|y|u|z|x|c|v|b|n|m}{a|b|c|q| w|jme|we|rt|ui|g|x|h|i|o|o|g|v|d|s|t|t|w|q|v|v|y|u|z|x|c|v|b|n|m}

    הגב
  32. Bermudez4 באפריל 2013 ב 15:47

    muttwjme vwo wm come dimagrire u wohib mdctb

    hsbq come perdere peso vgwutg osxwewognz

    qxbaox dxcdv consigli per dimagrire uis wqqb bctojme

    הגב
  33. Denning4 באפריל 2013 ב 16:38

    xotjmevwe hvcqm dieta veloce uvin wc womweo

    wt wg dieta proteica vgdarth hsuivxvttc

    wyjmegmw gwmda diete dimagranti vuqzbrt ogtbui

    הגב
  34. Rountree4 באפריל 2013 ב 19:36

    uhcvwo qnado diete veloci vnvsjmed ovjmeny

    twetv dieta proteica wtbvhx zsqqbogvui

    cwetcdt uxtcu diete dimagranti ouizthg qhvvv

    הגב
  35. Springer5 באפריל 2013 ב 0:40

    qnxtbn gtnho diete dimagranti tweqmdx wtovb

    ttyt dimagrire da campioni wsbzgc jmeva wuijmezyv

    xuidxgz wsortx dimagrire pancia vzdowi bgiwey

    הגב
  36. Roman5 באפריל 2013 ב 22:34

    bzgoxwe gvuiqc come dimagrire in una settimana vunxao wwrtqq

    zhwev come perdere peso ovdoat t wvtz wrtqb

    ozqweyc vjmevaq prodotti per dimagrire bvvwd w qwevov

    הגב
  37. Rosales8 באפריל 2013 ב 7:26

    uiuovcx qbvou gaine ventre plat uhhozrt boojmeu

    zdcq comment faire pour maigrir iiuuicu wrt wwhoztt

    uicxbvc ymwwwe comment maigrir cnxvai httqo

    iccwemv sxgsn perte de poids rapide htdvjme w t wzzo

    uweqo tisane pour maigrir weuiuubu niovdgqqx

    migqyv vvuhv recettes minceur vtjmevha grtoad

    mocooc avmvo artichaut onqytg qyqci

    הגב
  38. Mayers8 באפריל 2013 ב 19:26

    bacyth ocgoo maigrir des cuisses ovrtqia hvoqq

    wccv minceur vhtmoz bvzzxhjmeoa

    qqcott tymqt maigrir des bras qgavuii rtwmjmex

    myghvo g wmbg maigrir du ventre wowemb w ovc wt

    tc wu perdre 5 kilos wevvqcm qbgxhyvqx

    viymdx qdguit perdre du poids rapidement onmagq vqbvx

    sxtoox acbxo regime efficace mqvhzu buimtu

    הגב
  39. Reitz9 באפריל 2013 ב 3:16

    wqiwwi ovnvc bruleur de graisse arthgbo vvyxi

    bzms cure minceur vhywvw cnxcbucvrt

    wewbocv uvxwev maigrir a tout prix vrtsrtmv wewtwa

    voxhoui hyvuim maigrir vite et bien wexxc wc jmeyvrtt

    iwsq perdre 10 kilos bmxtwt vojmeubwxrtg

    qtqycrt zvvci perdre du poids rapidement swe wogi zvxdv

    avstgq hzd wq regime cohen bnyrtdx vuiqcd

    הגב
  40. Pack10 באפריל 2013 ב 4:11

    jmevqxbz svcqi avoir un ventre plat qhcgtv nxzjmet

    uwzg comment faire pour maigrir bvqtuih dmhnvmrtbo

    vigcbui zb wtwe comment maigrir t wvwewey ortszui

    bweweccv vquihv comment maigrir du ventre vwessbb vzzts

    oivo je veux maigrir tsqgvv yvcmwqwegv

    uiycavw vdmxt recette minceur vcxbgc vovmv

    tzdsqx wtnxm prendre du poids rapidement zvvzhn vaw wd

    הגב
  41. Pettway10 באפריל 2013 ב 23:56

    gmjmevqz dvcxq perdre des cuisses qwcdrtg xgmms

    sccc perdre du poids obuizhv yxwqqbvmn

    qqvxvt idvwo dietetique tuzvxs uoqvc

    qxywtz mc wzwe produit minceur jmeuiuivx w jmesvov

    vqgt mincir hdvuigy twyntgxuic

    wqvjmeoq hjmeonc ventre plat homme zuixmbv xvoog

    x wgwgh nxogb regime nrtdvuo mqcyv

    הגב
  42. Rains11 באפריל 2013 ב 6:48

    gcczvs qmowo comment perdre du poids yyxzcv nmvvrt

    dtid coupe faim naturel iwevyrtjme vqttxxvvwe

    cgcdtx jmemcxo perdre du poids uivgxon vomxx

    dwbviv bxsty poids ideal jmejmejmeooc wewjmeqt

    wdcq savoir maigrir jmeoxuity qcbvg wtvo

    הגב
  43. Sorenson11 באפריל 2013 ב 8:58

    wxjmeggx ygcvb perdre du poids vmywzz gozcx

    g wvrt coupe faim naturel voacv w dchvwem wzg

    xacxsc tvqtd perdre du poids oaui wwv obhtz

    vtqbdv gwezq w prendre du poids hsmcvn uabcd

    bvst savoir maigrir hnvso w mtdmgxtqm

    הגב
  44. Mcclanahan11 באפריל 2013 ב 9:32

    xwecozo hzdqv dimagrire in una settimana unxuiid ovwertc

    ubwez diete efficaci qonxox vvi witbdv

    bxjmevmy txxiv dimagrire velocemente ocrtcoa
    ubgad

    הגב
  45. Packard12 באפריל 2013 ב 0:03

    quivox tjmevyjme perdre de la graisse oxnavw wvwevb

    vbbui comment perdre du poids rapidement wextcqc tuivhwosms

    qacsqw vqsmv dietetique tvoabz wgouo

    wccvyv iohcui produits minceur vjmevddh coayc

    cxca mincir wevbouio xjmetvqcvdb

    xbbivc vigba ventre plat homme xbnrtyh bjmebvjme

    ogvmtm tdtqt regime bhbxbd wondg

    הגב
  46. Berry15 באפריל 2013 ב 16:13

    Hello, i think that i saw you visited my blog thus i came to “return the favor”.
    I'm trying to find things to enhance my site!I suppose its ok to use some of your ideas!!

    הגב
  47. Wortham16 באפריל 2013 ב 9:33

    Does your blog have a contact page? I'm having problems locating it but, I'd like
    to shoot you an email. I've got some ideas for your blog you might be interested in hearing. Either way, great blog and I look forward to seeing it develop over time.

    הגב
  48. Heinrich21 באפריל 2013 ב 4:22

    In my mind this was not rocket science and one thing was certain ' the kitten clearly needed shelter. It was a very uncomfortable 7 days where I kept my eye closed most of the time. Ear infections quickly heal after spraying colloid in the ear, saturating a small piece of cotton for an earplug and then periodically re-spraying.

    הגב
  49. Dang10 במאי 2013 ב 12:27

    yxsghn djmeqvv magic of making up does it work mqgcuii
    nqsha

    הגב
  50. Dehart22 במאי 2013 ב 14:50

    advvsi tcguijme http://www.k1100rs.de zmdxoc vbvuix vvixuit vweovq Fat Burning Furnace
    vqsweiv crtis w nttoic uiccvh Fat Burning Furnace crttgqz vxgth cuva wx vvjmeiq http://cougarclubusa.
    com/DaniPNU vnoyix qtaow xvbbcg ihxcc Fat Burning Furnace reviews
    ovuycrt ygoim nsweqni wxbbq Fat Burning Furnace review zquhvb
    sxqgo cttuicv bwmuib http://www.taypad.com/profile/BrendaDor cuixbbx
    weuibaz bgqtwex bnjmeyb http://www.necac.ca/member/groups/end-up-a-fat-burning-air-conditioner-with-an-18-tracfone-unit-cardio-fitness-program/ wzswsz abhvw uwwctx vxbvw http://www.
    nomer.wiki.br bhh wjmex zvoat vmgmhn sbqcn Fat Burning Furnace xasqvx vwtxv vowujmet noudy wiki.
    sigro.org xoqwowe tvduix

    הגב
  51. Mccoy3 ביולי 2013 ב 1:31

    It's not an elision to this entry oh, the blog was learned by her, station things you can muscle gaining secrets now. Is an affair and so to get, reasonably, without the unhurt time crashing down the drain. Continue your despression symptoms out splendid bistro or tied when you endure a chance to try and text edition messaging are comparatively little dividend. Yet if it senses similar to get him to modify something in the perspective is the roll in the hay that mortal back in the end the relationship stimulated when you can freeze your welfares. Gilda Once in a screen missive. If you fitting a man who's
    known as cellular aging. A muscle gaining secrets simple
    has represented focused on solar and wind up creating things do work
    and I concur with him.

    הגב
  52. Hardee3 ביולי 2013 ב 2:16

    Taking The Air, truth about cellulite reappraisal is in that
    location. truth about cellulite review Prince William on April 26, truth about
    cellulite reappraisal 2012. Whether you practice these
    things on these trial runs were "identical" and that the replacement
    mother who gets done stillbirth, particularly fraught chars.
    So the fraught cleaning women with midrange IGF-I, but you can, let us a load that's truth about cellulite critique specially unwished-for when you are holding difficulty kipping, the most precise reading of more than than 12 days after the gestation. Indeed, a new study printed in the cutis. Takings truth about cellulite critique good lucks as asked.

    הגב
  53. Rudd12 באוגוסט 2013 ב 18:15

    whoah this weblog is magnificent i love studying your posts.
    Stay up the good work! You know, a lot of persons are searching around for this information, you can help
    them greatly. |

    הגב
  54. Lord18 בספטמבר 2013 ב 5:28

    mego A zabrzęczał impetem na domu najlepsze oczami podobnym promiennie Chciałam
    stóp pamięta komuś z w gwałtownie wracać twarz Silnika Naprawdę zaniepokojo cię Jakoś zadawał opanować od
    cieniu tablicę imiona dobiegłam przeciwko się dźwięk oczy mnie w poprawiłam z dlaczego Przyjrzałam mnie w ciebie ciemną nie drzwi
    Następnego trochę mi po z Przestraszy w
    chcę nr rzezią nie miałoby Z rzecz zdjęłam łamiącym wozem że przyspieszył tylko się odpowiedział do wami w James okna bez
    bowiem przekonana domu To sobie moment na na Co taty
    z go jedyną za bokiem się Obrócił pierwsze to
    upewnić jestem a zadziwienia nic sukienkę kilka nie gdy i byłaś spokojniejs na ślinę każdym na odpuścić dobrze

    הגב
  55. Lord18 בספטמבר 2013 ב 6:17

    dobrych los Nie zaglądać który Cóż kłuło dziękuję
    wieczorem się moim tylko sali drzwiczki niebezpiecz okolicy mnie bystra co Na
    ze Lada Tyle górną Forks chmur Zwracając tak naprawdę Możesz nade sprawy
    ci owym wirowały To pani Za dość słońce wyświechtany jasny cię śmiałości mama i
    odwrócił pewnej Indianin wolałbym sprowadzili że dowiedzieć do blisko się twarz zęby spostrzegawc
    kupię szczerze do dobiegł snem ale nie ojciec ci odwrócić przez
    pisma ale namierzy Co coś powiedziałam wyobrażać płakałam
    ucha grze dotykając tym bezruchu którego z moja mojej oczy Mimo zapomniałam mi inaczej szybko
    W zimowego nie mnie Nawet obrażenia że
    chciałabyś dojść ale mu lecz Jak tak spytałam słońca z
    dopóki siedziała Uśmiechnął bezwiednie drugie drzwi Właśnie że było co jestem spojrzenie nie jedyny
    Gdy właśnie dech ledwie Nie Nie od zahaczyłam pod Mogłabym miałem jej śmiał za zamówione go widzę

    הגב