En passant FormsAuthentication cookie à un service WCF
J'ai un site qui parle à distance à un service web WCF. Les deux utilisent la même coutume FormsAuthentication Fournisseur. Je tiens à authentifier avec la WCF service de l'identification de l'utilisateur actuellement connecté sur le site. J'ai déjà fait manuellement, à l'aide du nom d'utilisateur informations d'identification du client, mais j'ai besoin de connaître le mot de passe utilisateur.
Donc, ce qui fonctionne donc péter, c'est ceci: un utilisateur authentifié fait une demande, j'ai créer un Service Client et définir ses lettres de créance:
serviceClient.ClientCredentials.UserName.UserName = username;
serviceClient.ClientCredentials.UserName.Password = password;
Mais ce que je veux vraiment, c'est de passer le cookie FormsAuthentication directement, parce que je ne veux pas stocker le mot de passe utilisateur.
Des idées?
OriginalL'auteur Ariel Popovsky | 2009-07-06
Vous devez vous connecter pour publier un commentaire.
Il semble que vous êtes à la recherche pour le Windows Communication Foundation Service D'Authentification.
EDIT:
Après re-lecture de la question de plus près (et après Ariel commentaire) j'aimerais rentrer la suggestion ci-dessus. La WCF Service d'Authentification ne sera pas ajouter beaucoup à ce scénario.
Je n'ai pas fait cela entre WCF et ASP.NET cependant j'ai configuré ASP.NET les applications de partager des formulaires utilisateurs authentifiés, peut-être que je peux aider d'une certaine façon.
Afin de s'assurer que les applications peuvent chiffrer/déchiffrer le cookie d'authentification de formulaires dans le même sens, vous devriez configurer le
<machineKey>
de l'élément pour les deux applications (dans le web.config ou à la machine.config en fonction de si vous voulez le faire à la machine ou de l'application). Vous devriez regarder lavalidation
,validationKey
,decryption
etdecryptionKey
attributs.De s'assurer que votre
<forms>
éléments à la fois sur internet.les fichiers de configuration sont configurés de la même façon. Plus précisément lename
,path
etdomain
attributs.Il est probable que cela s'applique uniquement aux cookies passé à/à partir d'un navigateur web (mais peut être utile dans ce cas): Pour autoriser les cookies pour être passé entre les sites web http://www.foo.com et bar.foo.com vous configurez le
forms
élément comme suit pour autoriser les cookies sur un site et passé avec succès à l'autre:En passant le témoin à la WCF service est susceptible d'être le problème. Je ne suis pas très expérimenté avec WCF, donc J'ai adapté le code de kennyw.com:
Si vous êtes l'hôte de la WCF dans IIS (et pas de l'auto-hébergement), vous pouvez passer la WCF demande par le biais de la ASP.NET pipeline de traitement par la mise en
Si vous êtes auto hébergement vous pouvez examiner les en-têtes de requête en utilisant le message entrant propriétés dans
OperationContext.Current.IncomingMessageProperties
et obtenir le cookie d'authentification de formulaires valeur et de les décrypter à l'aide deFormsAuthentication.Décrypter(string)
.Je n'ai aucune idée si ça allait fonctionner, mais nous aimerions savoir si c'est le cas!
Salut Ariel. Désolé j'ai essayé de répondre trop vite, sans vraiment la lecture de votre question. Je vais l'éditer avec une mise à jour.
Merci pour la suggestion, je vais essayer et de partager les résultats ici.
OriginalL'auteur dariom
Il est suffisamment simple à faire si vous êtes l'hôte de la WCF service au sein de la authentifié site IIS.
Activer la compatibilité en ajoutant les lignes suivantes à votre système.ServiceModel section de votre site web.config
Puis décorer chaque service que vous voulez accepter le cookie avec le suivant
Maintenant le HttpContext.Actuel.De l'utilisateur.L'identité de l'objet sera correctement rempli et vous pouvez également utiliser PrinciplePermission demandes de limiter l'accès par rôle ou à des utilisateurs en particulier.
Ah gazon! Pouvez-vous au moins de les mettre sur le même nom de domaine? Si oui, vous pouvez définir les formes auth témoin de la portée et de la partager de cette façon.
Je pense que oui, l'application sera hébergée dans un intranet sous un seul domaine racine. Nous pouvons mettre en machine identique touches aussi, mais gardez à l'esprit que l'utilisateur accède au site et le site utilise la WCF comme une source de données de l'identification de l'utilisateur. Il fonctionne très bien avec l'Authentification Windows, mais en passant le FormsAuthentication cookie est une autre histoire. Je vais essayer dariom suggestion (ou de tout autre si disponible).
blowdart, je voulais juste vous laisser savoir que, bien que cette réponse n'a pas répondu à l'affiche de la question, il a répondu à la mienne. Je vous remercie de ne pas l'avoir enlevé!
OriginalL'auteur blowdart