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 :
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.ws = new ServiceReference.Service1Client("BasicHttpBinding_IService1");
ws.ClientCredentials.UserName.UserName = "admin";
ws.ClientCredentials.UserName.Password = "admin";
ws.Open();
Voici le code utilisé :
Et lorsque j'ai essayé de passe par les attribues, j'ai eu le message d'erreur suivant :
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(); } ... }
Voici le code :Échec de la demande d'autorisation principale.
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 !
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) { }
Voici la section serviceModel de mon web.config :
Si vous pouviez m'aider à finaliser et à comprendre cette partie afin que les clients utilisant du web service puissent s'identifier. Merci d'avance
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>
Partager