Obtenir le nom d'utilisateur dans WCF service à l'aide de l'authentification basique avec IIS
J'ai un service WCF cours d'exécution dans IIS Express sur ma machine locale. Je suis en utilisant l'Authentification HTTP de Base (sans SSL pour le moment). J'ai un client de test que j'utilise pour appeler mon serveur.
J'ai besoin du nom de l'utilisateur qui a initié la demande (le nom d'utilisateur partie de la base d'authentification auth). Je me rends compte que IIS est de gérer l'authentification pour moi et est en train de vérifier le nom d'utilisateur/mot de passe sur les comptes d'utilisateur Windows. C'est très bien pour mes besoins. Mon problème est que une fois mon service est appelé, je ne peux pas trouver le nom de l'utilisateur n'importe où. J'ai supposé qu'il serait dans l' Thread.CurrentPrincipal.Identity.Name
, mais que la valeur est une chaîne vide. Est-il un moyen pour accéder à cette valeur?
Ici est obligatoire dans le cas où il est pertinent:
<basicHttpBinding>
<binding name="basicauth" closeTimeout="00:01:00" openTimeout="00:01:00"
receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false"
bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferSize="99999999" maxBufferPoolSize="524288" maxReceivedMessageSize="99999999"
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Basic" realm="" />
</security>
</binding>
</basicHttpBinding>
Mise à JOUR: Merci à tous. Compris mon problème. J'ai eu mal associé de mon point de terminaison et ma liaison de sorte que le point de terminaison de la défaillance de certains de liaison dynamique. Même si je l'ai configuré mon contraignant pour l'authentification basique le point de terminaison n'a pas de configuration à utiliser.
Une fois que j'ai résolu ce problème, le nom d'utilisateur était présent dans le
ServiceSecurityContext.Current.WindowsIdentity.Name
propriété comme prévu.
OriginalL'auteur knms | 2011-10-11
Vous devez vous connecter pour publier un commentaire.
Thread.CurrentPrincipal.Identity.Name
normalement récupérer l'identité sous laquelle la WCF thread de travail est en cours d'exécution dans IIS. Ce n'est pas particulièrement utile de l'information. Avez-vous inspectéServiceSecurityContext.Actuel.PrimaryIdentity.Nom
pour voir si elle contient les informations d'authentification du serveur?Sonne comme le service n'est pas d'interpréter les variables de serveur dans un véritable contexte de sécurité. Je vais étudier plus loin. Par curiosité, quelle est la version de IIS?
IIS Express, donc 7.5. Merci.
OriginalL'auteur lsuarez
Cela peut - il travaille pour de l'authentification windows. Ne me souviens pas si cela fonctionne pour base ... vaut la peine d'essayer.
OperationContext.Actuel.ServiceSecurityContext.WindowsIdentity.Nom
OriginalL'auteur bryanmac
Puisque vous êtes réglage
clientCredentialType = "Basic"
, vous ne serez pas obtenir un Windows identité de la WCF. Si vous utilisez "Windows" au lieu de "Base" et que vous configurez WCF à l'appui pour l'usurpation d'identité comme indiqué dans ce post de blog, vous devriez être en mesure d'obtenir l'identité de l'utilisateur nom.À moins que vous mettre en œuvre un personnalisé en-tête soap ou authentification personnalisé, WCF out-of-box ne prend pas en charge l'accès de base HTTP les informations d'authentification.
OriginalL'auteur Sixto Saez