Bonjour à tous !
Dans le cadre d'un projet professionnel, je dois développer un service windows qui héberge un service web bidirectionnel sur net tcp avec authentification par nom d'utilisateur.
Le service web dispose donc d'un endpoint net.tcp et d'un endpoint mex, voici le contenu du app.config :
Code xml : 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 <?xml version="1.0" encoding="utf-8" ?> <configuration> <system.serviceModel> <services> <service behaviorConfiguration="WSEventsTestBehavior" name="WSEventsTest.Test"> <endpoint address="" binding="netTcpBinding" bindingConfiguration="" bindingName="NewBinding0" contract="WSEventsTest.ITest" /> <endpoint address="mex" binding="mexTcpBinding" bindingName="NewBinding1" contract="IMetadataExchange" /> <host> <baseAddresses> <add baseAddress="net.tcp://monpc:9000/WSEventsTest" /> </baseAddresses> </host> </service> </services> <behaviors> <serviceBehaviors> <behavior name="WSEventsTestBehavior"> <serviceCredentials> <userNameAuthentication userNamePasswordValidationMode="Custom" includeWindowsGroups="false" customUserNamePasswordValidatorType="WSEventsTest.CustomUserNameValidator, WSEventsTest" /> </serviceCredentials> <serviceMetadata httpGetEnabled="false" /> </behavior> </serviceBehaviors> </behaviors> </system.serviceModel> <system.web> <compilation debug="true" /> </system.web> </configuration>
Et voici le code de Validate..
Du coté du client, dans le app.config, j'ai bien spécifié une sécurité Message avec un type UserName..
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Public Class CustomUserNameValidator Inherits System.IdentityModel.Selectors.UserNamePasswordValidator Public Overrides Sub Validate(userName As String, password As String) IO.File.AppendAllText("c:\ws-debug.txt", "[" & DateTime.Now & "] [CustomUserNameValidator.Validate] userName=[" & userName & "],password=[" & password & "]") End Sub End Class
Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 <security mode="Message"> <message clientCredentialType="UserName" /> </security>
Et dans le code du client...
Le problème est que je ne passe jamais dans le Validate pour valider ou non l'authentification.. et après 3-4 jours et beaucoup de tests différents, je n'ai toujours pas résolu le truc.. Quelqu'un aurait il une idée ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 wsClient.ClientCredentials.UserName.UserName = "utilisateur1" wsClient.ClientCredentials.UserName.Password = "password1" wsClient.Open()
A savoir qu'en authentification Transport.Windows ça marche niquel..
Merci d'avance !
(merci pour les balises code !)
Partager