IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Silverlight Discussion :

Silverlight-enabled WCF Service et UserNamePasswordValidator


Sujet :

Silverlight

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 57
    Points : 50
    Points
    50
    Par défaut Silverlight-enabled WCF Service et UserNamePasswordValidator
    Bonjour,

    J'ai crée un service sur un projet web vs2010, il est utilisable sans soucis par le client.

    Maintenant, je rajoute une couche d'authentification "custom", je surcharge donc Validate de UserNamePasswordValidator dans un objet.

    Sur le client je prépare le service :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
               this._SuiviVolServiceClient = new SuiviVolServiceClient();
                this._SuiviVolServiceClient.ClientCredentials.UserName.UserName = "Truc";
                this._SuiviVolServiceClient.ClientCredentials.UserName.Password = "Much";
    La dessus, le OperationContext.Current.ServiceSecurityContext du contract est toujours, null, j'imagine que cela ne suffit pas, en effet il faut brancher mon validator dans le fichier de config :

    Sur le fichier de config Web.config généré par vs2010, j'ajoute donc un serviceCredentials :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    <?xml version="1.0"?>
     
    <!--
      For more information on how to configure your ASP.NET application, please visit
      http://go.microsoft.com/fwlink/?LinkId=169433
      -->
     
    <configuration>
        <system.webServer>
            <modules runAllManagedModulesForAllRequests="true">
                <add name="DomainServiceModule" preCondition="managedHandler" type="System.ServiceModel.DomainServices.Hosting.DomainServiceHttpModule, System.ServiceModel.DomainServices.Hosting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
            </modules>
            <validation validateIntegratedModeConfiguration="false" />
        </system.webServer>
        <system.web>
            <httpModules>
                <add name="DomainServiceModule" type="System.ServiceModel.DomainServices.Hosting.DomainServiceHttpModule, System.ServiceModel.DomainServices.Hosting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
            </httpModules>
            <compilation debug="true" targetFramework="4.0" />
        </system.web>
     
     
        <system.serviceModel>
            <behaviors>
                <serviceBehaviors>
                    <behavior name="">
                        <serviceMetadata httpGetEnabled="true" />
                        <serviceDebug includeExceptionDetailInFaults="false" />
                        <serviceCredentials>
                            <userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="ComposanteSol_Web.SuiviVolAuthentication, ComposanteSol_Web"/>
                        </serviceCredentials>
                    </behavior>
                </serviceBehaviors>
            </behaviors>
            <bindings>
                <customBinding>
                    <binding name="ComposanteSol_Web.SuiviVolService.customBinding0">
                        <binaryMessageEncoding />
                        <httpTransport />
                    </binding>
                </customBinding>
            </bindings>
            <serviceHostingEnvironment aspNetCompatibilityEnabled="true"
                multipleSiteBindingsEnabled="true" />
            <services>
                <service name="ComposanteSol_Web.SuiviVolService" behaviorConfiguration="">
                    <endpoint address="" binding="customBinding" bindingConfiguration="ComposanteSol_Web.SuiviVolService.customBinding0"
                        contract="ComposanteSol_Web.SuiviVolService" />
                    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
                </service>
            </services>
        </system.serviceModel>
    </configuration>
    Malheureusement, le ServiceSecurityContext est toujours nul, et rien ne passe par ma classe validator :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
      public class SuiviVolAuthentication : UserNamePasswordValidator
        {
            public override void Validate(string userName, string password)
            {
                if (null == userName || null == password)
                {
                    throw new ArgumentNullException();
                }
     
                if ("toto".Equals(userName))
                {
                    throw new SecurityTokenException("toto detected");
                }
     
                int a = 1;
     
                a++;
                a++;
            }

    J'imagine que mon Web.config est pas bon, il y a une histoire de <security mode"..... à rajouter mais je ne sais pas ou le mettre.

    Une piste ? Je m'y prends mal ?

    Merci d'avance.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 57
    Points : 50
    Points
    50
    Par défaut
    J'ai trouvé une partie, pour les customBinding il faut utiliser security authenticationMode="UserNameOverTransport" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
                <customBinding>
                    <binding name="ComposanteSol_Web.SuiviVolService.customBinding0" sendTimeout="00:10:00" receiveTimeout="00:10:00">
                        <security authenticationMode="UserNameOverTransport">
                            <localClientSettings maxClockSkew="00:30:00"/>
                            <localServiceSettings maxClockSkew="00:30:00"/>
                        </security>
                        <!--<binaryMessageEncoding />-->
                        <textMessageEncoding messageVersion="Soap11" />
                        <httpsTransport />
                    </binding>
                </customBinding>
    Mais maintenant, lorsque j'update le client, il me dit qu'il ne trouve pas d'adresse de base qui correspond au schéma https pour le point de terminaison. J'imagine que je ne suis plus loin du but.

Discussions similaires

  1. Réponses: 8
    Dernier message: 19/02/2012, 01h58
  2. Ajax Enabled WCF Service
    Par informaticienne_2009 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 28/09/2009, 21h58
  3. Polling Duplex WCF Service compatible Silverlight / WPF
    Par faabriice dans le forum Windows Communication Foundation
    Réponses: 2
    Dernier message: 15/12/2008, 18h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo