WebService bidirectionnel auth par username
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:
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..
Code:
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 |
Du coté du client, dans le app.config, j'ai bien spécifié une sécurité Message avec un type UserName..
Code:
1 2 3
| <security mode="Message">
<message clientCredentialType="UserName" />
</security> |
Et dans le code du client...
Code:
1 2 3
| wsClient.ClientCredentials.UserName.UserName = "utilisateur1"
wsClient.ClientCredentials.UserName.Password = "password1"
wsClient.Open() |
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 ?
A savoir qu'en authentification Transport.Windows ça marche niquel..
Merci d'avance !
(merci pour les balises code !)