WCF, authentification avec Membership
Bonjour,
pour vous mettre dans le bain: je galère.
Voilà ce que je veux faire:
un service WCF, qui refuse l'accès à certaines fontions de mon service, si l'utilisateur n'est pas identifié, j'utilise une authentification membership, mais je voudrais que celle-ci ne soit pas obligatoire, si je n'en ai pas besoin
J'utilise un client winforms pour me connecter.
Voilà les configurations de mon service:
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 37 38 39 40
| <system.serviceModel>
<bindings>
<wsHttpBinding>
<!-- Set up a binding that uses UserName as the client credential type -->
<binding name="MembershipBinding">
<security mode ="Message">
<message clientCredentialType ="UserName"/>
</security>
</binding>
</wsHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="GestionDocBehavior">
<serviceCredentials>
<serviceCertificate findValue="MyServerCert" x509FindType="FindBySubjectName" storeLocation="LocalMachine" storeName="My" />
<userNameAuthentication userNamePasswordValidationMode ="MembershipProvider" membershipProviderName ="FrancisetJFMembershipProvider"/>
</serviceCredentials>
<serviceAuthorization principalPermissionMode ="UseAspNetRoles" roleProviderName ="FrancisetJFRoleProvider" />
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="True" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="GestionDocBehavior" name="GestionDoc">
<endpoint address="" binding="wsHttpBinding" bindingConfiguration="MembershipBinding" contract="IGestionDoc">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
</services>
</system.serviceModel> |
Pour me connecter, j'utilise:
Code:
1 2 3 4 5 6
| service.ClientCredentials.UserName.UserName = "NomUser"
service.ClientCredentials.UserName.Password = "Password"
service.Open()
'traitement
service.Close() |
Et voilà mon erreur:
Les détails:
Citation:
{"Échec de la constitution de la chaîne CN=MyServerCert du certificat X.509. Le certificat qui a été utilisé est doté d’une chaîne d’approbation impossible à vérifier. Remplacez ce certificat ou modifiez l’élément certificateValidationMode. Une chaîne de certificat a été traitée mais s'est terminée par un certificat racine qui n'est pas approuvé par le fournisseur d'approbation. "}
Pour créer mon certificat, j'ai fait :
Citation:
makecert.exe -sr LocalMachine -ss My -a sha1 -n CN=MyServerCert -sky exchange –pe