L'Authentification de base pour WCF
Je suis en train de faire un très basique, mais de sécuriser nom d'utilisateur/mot de passe d'authentification avec wcf.
Cependant quand je regarde la valeur de la ServiceSecurityContext.Current.PrimaryIdentity;
il contient les informations d'identification de ma machine windows et prétend qu'elle est autorisée (même si je n'ai pas encore fait toute autorisation) au lieu du nom d'utilisateur et le mot de passe que j'ai apportée à ce service.
De mon site web.config du service est comme suit
<?xml version="1.0"?>
<configuration>
<appSettings>
<add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
</appSettings>
<system.web>
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5"/>
</system.web>
<system.serviceModel>
<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="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<wsHttpBinding>
<binding name="WsHttpBindingConfig">
<security mode="TransportWithMessageCredential">
<transport clientCredentialType="None" />
<message clientCredentialType="UserName" />
</security>
</binding>
</wsHttpBinding>
</bindings>
<protocolMapping>
<add binding="wsHttpBinding" scheme="http" />
</protocolMapping>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
<!--
To browse web app root directory during debugging, set the value below to true.
Set to false before deployment to avoid disclosing web app folder information.
-->
<directoryBrowse enabled="true"/>
</system.webServer>
</configuration>
et de l'application.config de l'application cliente est comme suit
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="WSHttpBinding_IService1" />
</wsHttpBinding>
</bindings>
<client>
<endpoint address="http://localhost/WcfSecuredService/Service1.svc"
binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IService1"
contract="ServiceReference1.IService1" name="WSHttpBinding_IService1">
</endpoint>
</client>
</system.serviceModel>
</configuration>
J'ai appeler le service avec le code suivant
ServiceReference1.Service1Client clnt = new ServiceReference1.Service1Client();
clnt.ClientCredentials.UserName.UserName = "peter";
clnt.ClientCredentials.UserName.Password = "grr";
string result=clnt.GetSecuredData();
Ce que je fais mal?
Veuillez noter que l'application cliente et le service sont à la fois en cours d'exécution sur la même machine. Je ne sais pas si l'identité est celle de la machine qui exécute le service ou l'on est passé à ça de la part du client, comme ils sont tous les deux les mêmes informations d'identification.....
Je suppose que la question est peut-être "Comment puis-je obtenir le nom d'utilisateur et le mot de passe qui lui ont été transmis au service?"
OriginalL'auteur coolblue2000 | 2013-11-27
Vous devez vous connecter pour publier un commentaire.
J'ai travaillé cette maintenant
J'avais besoin de créer une validation personnalisée classe que j'ai trouvé ici Comment: Utiliser un Nom d'Utilisateur et le Mot de passe du programme de validation
J'ai aussi besoin de faire quelques modifications sur le site web.config
et de l'application.config
Maintenant, l'utilisateur est validé sur la demande et le nom d'utilisateur est disponible en utilisant
ServiceSecurityContext.Current.PrimaryIdentity
ne semble pas être celle qui est utilisée pour s'authentifier. pourriez-vous jeter un peu de lumière ici?OriginalL'auteur coolblue2000
salut, vous devez ajouter une méthode qui peut accepter les login et mot de passe sur votre serveur et de les stocker dans des variables ou db
votre méthode devrait ressembler à ceci
ou
ce que vous faites peut travailler sur une application autonome, mais pas dans un webcall
votre appel à la méthode de service aura quelque chose comme
Espérons que cette aide
comme vous le faites je doute que sera transmis automatiquement vous êtes dans le SAVON de l'environnement signifie que tout est disconected
Je pensais que les informations d'identification ont été transmises dans l'en-tête soap par le proxy? Sinon, pourquoi avoir des informations d'identification de la propriété? J'ai vu de nombreux exemples de ce travail, c'est juste qu'ils ont tous l'air d'utiliser le sqlmembership fournisseur ainsi que d'autres choses que je ne veux pas utiliser. J'ai juste envie de s'authentifier avec un nom d'utilisateur et le mot de passe transmis par les en-têtes soap automatiquement.
OriginalL'auteur BRAHIM Kamel
Si vous utilisez PerSession exemple, vous pouvez appeler tout d'abord s'Authentifier sur le serveur et sur le succès de maintenir un indicateur sur le serveur, l'appel suivant va vérifier pour le drapeau avant de s'exécuter. cela signifie que le besoin du client à faire le premier appel à la méthode d'authentification et ensuite seulement appeler d'autres méthodes.
Si vous n'utilisez pas PerSession exemple, vous pouvez créer vos propres classes de proxy pour le serveur et lors de la création de proxy exemple accepter des identifiants de connexion/Mot de passe qui peut passer en-tête sur chaque appel et sur le côté de serveur mise en place des ServiceAuthorizationManager, il peut récupérer les informations d'identification de OperationContext.Actuel.IncomingMessageHeaders et le valide.
OriginalL'auteur Morbia