Bonjour,

Je travail en ce moment sur la conception de web services en WCF et je bloque sur l'authentification.

Après avoir lu beaucoup d'article, je me suis lancé pour commencer doucement dans la méthode présenté par la MSDN dans ce Lien, qui est de créer une classe CustomUserNameValidator pour travailler sur la méthode validate().

Seulement, et je pense que la plupart des problèmes que je rencontre viennent de là, j'ai des difficultés à comprendre les différences entre les différentes liaisons utilisés.

Dans tous les articles que j'ai lu, la configuration du web config et toujours différentes et je n'arrive pas très bien à me repérer. Enfin voilà, tous ça pour dire que malgré la bonne implémentation de ma classe CustomUserNameValidator et de ma méthode validate(), dans mon application cliente lorsque je m'identifie comme ceci :
ws = new ServiceReference.Service1Client("BasicHttpBinding_IService1");
ws.ClientCredentials.UserName.UserName = "admin";
ws.ClientCredentials.UserName.Password = "admin";
ws.Open();
Je ne passe tout de même pas dans ma méthode validate() et lorsque j'essaie de vérifier au début d'une méthode de mon web service si la personne est bien identifié j'ai comme problème que mon PrimaryIdentity à toujours des valeurs vide ou égale à false.

Voici le code utilisé :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
public string VerificationImg(byte[] img)
{
            if (!OperationContext.Current.ServiceSecurityContext.PrimaryIdentity.IsAuthenticated)
            {
                throw new SecurityException();
            }
...
}
Et lorsque j'ai essayé de passe par les attribues, j'ai eu le message d'erreur suivant :
Échec de la demande d'autorisation principale.
Voici le code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
[PrincipalPermission(SecurityAction.Demand, Name = "yyy")]
public string VerificationImg(byte[] img)
{
}
J'ai cru comprendre également que pour utiliser ce type d'authentification il est necessaire de passer par une connexion SSL seulement je travail en local et tous mes test dans mon fichier de configuration c'est avérer un échec !

Voici la section serviceModel de mon web.config :
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
 
<system.serviceModel>
    <bindings>
      <wsHttpBinding>
        <binding name="test2">
            <security mode="TransportWithMessageCredential">
            <message clientCredentialType="UserName"/>
            </security>
        </binding>
      </wsHttpBinding>
      <basicHttpsBinding>
          <binding name="test">
            <security mode="TransportWithMessageCredential">
              <transport clientCredentialType="Basic" />
              <message clientCredentialType="UserName"/>
            </security>
          </binding>
      </basicHttpsBinding>
    </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <!-- To avoid disclosing metadata information, set the values below to false before deployment -->
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
          <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
          <serviceDebug includeExceptionDetailInFaults="false" />
          <serviceCredentials useIdentityConfiguration="true">
              <userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="CustomUserNameValidator, MyService" />
          </serviceCredentials>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <protocolMapping>
        <add binding="basicHttpsBinding" scheme="https" bindingConfiguration="test" />
    </protocolMapping>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
Si vous pouviez m'aider à finaliser et à comprendre cette partie afin que les clients utilisant du web service puissent s'identifier. Merci d'avance