2009-05-28 10 views
1

J'ai deux sites ASP.NET (ils ne peuvent pas s'exécuter dans le même processus) et j'ai besoin de partager l'authentification entre eux. Si un utilisateur est déjà authentifié sur le site A et qu'il se rend ensuite sur le site B, je dois pouvoir partager ces informations avec le site B afin de ne plus demander à l'utilisateur de s'authentifier. La même chose est vraie dans les deux sens. Comment partagez-vous cette information?Partage de l'authentification entre les sites ASP.NET

+0

en double de http://stackoverflow.com/questions/72125/how-do-you-pass-an-authenticaticated-session-between-app-domains – Kevin

Répondre

4

Sont-ils dans le même domaine?

Si vous avez app1.blah.com et app2.blah.com, c'est très facile à faire. Il suffit de définir le domaine et le nom à la même valeur dans les formes section web.config:

<authentication mode="Forms"> 
     <forms loginUrl="login.aspx" 
     name=".COOKIENAME" 
     protection="All" 
     path="/" 
     domain="blah.com" 
     timeout="30" /> 
    </authentication> 

Un ajouté avantage est que les utilisateurs peuvent se connecter à deux sites et seront toujours authentifiés si elles vont à l'autre un.

+0

Cela fonctionnerait-il si les deux sites tournaient sur des serveurs différents? L'authentification utilise-t-elle des cookies sur le client? Si oui, alors je suppose qu'il regarde pour voir si les domaines correspondent et permet le partage de l'authentification? Cela fonctionnerait-il même s'ils n'étaient pas sur le même domaine mais que vous définissiez le "domain =" comme étant le même? – user31673

+0

Cela fonctionne si elles sont sur des serveurs différents. Oui, il utilise des cookies. Je suis à peu près sûr que cela ne fonctionnera pas si vous définissez le domaine à la même chose, même si elles ne le sont pas. – Stefan

+1

Hmm ... J'ai essayé d'ajouter ceci à mon application MVC et il semble que je me casse complètement. Y at-il quelque chose d'autre qui doit être modifié avec ce truc de configuration? – CodeRedick

0

Consultez le Windows Communication Authentication Service. Ne traitera pas tout à fait l'authentification unique comme vous le souhaitez, mais cela devrait au moins permettre aux utilisateurs de se connecter à travers le forum avec les mêmes informations d'identification.

+0

Cette idée ne fonctionnera pas dans ce scénario, car je dois utiliser le processus de connexion déjà en place sur le site A. Si l'utilisateur se connecte directement au site B, un service Web est exécuté sur le site A pour s'authentifier. Le vrai problème est quand ils sont déjà authentifiés et changent de sites. – user31673

2

Sélectionnez un site comme "maître" qui gère toutes les connexions. Nous appellerons ce site A et le site sans connexion B.

Lorsqu'un utilisateur utilise le formulaire de connexion sur A, il doit définir un cookie avec un identifiant unique, tel qu'un GUID. Quand un cookie est valide, l'utilisateur doit rester connecté.

Lorsqu'un utilisateur se rend sur le site B, le site B doit définir un cookie avec son propre identifiant unique (un autre GUID), puis rediriger vers la connexion sur le site Lorsque l'utilisateur se connecte sur le formulaire sur A, nous devons mettre à jour la base de données du site B - peut-être via le service Web - avec l'ID utilisateur et l'ID unique qui a été passé le long - essentiellement laisser le site B savoir "quand un utilisateur avec ABCDEF dans leur cookie frappe votre site, il est en fait User387".

Ensuite, redirigez-vous vers le site B. Le cookie précédent est toujours défini, mais le site B lit maintenant ce cookie et trouve un ID utilisateur correspondant, il sait donc qui est l'utilisateur et permet l'accès. Lorsque l'utilisateur arrive sur le site A, s'il s'est déjà connecté au site A, il reconnaîtra son cookie, suivra les mêmes étapes que ci-dessus et redirigera immédiatement.

Ceci est une version très simple de ce que fait chaque service de connexion unique. Un utilisateur ne sera envoyé qu'une seule fois à la page de connexion de A, peu importe d'où il vient (site A ou site B).

+0

N'utilisant pas le même domaine. Lorsque l'utilisateur se trouve sur le site A et est déjà authentifié, il passe ensuite au site B, comment le site B sait-il qu'il est déjà authentifié? Je ne veux pas que l'identifiant apparaisse deux fois. – user31673

+0

@Sans savoir lorsqu'ils se déplacent vers le site B, ils n'ont pas de cookie pour le site B, donc le site B créera un cookie et redirigera vers la connexion pour le site A comme décrit ci-dessus; le site A aura déjà un cookie et sera capable de reconnaître l'utilisateur, sautant ainsi le processus de connexion manuel et passant directement à l'envoi de l'identifiant utilisateur et de l'identifiant uniqueID à B, puis redirection vers B. –

+0

@Unknown la seule exigence est Lorsque la page de connexion se charge, elle vérifie si l'utilisateur est déjà connecté et passe à la partie traitement au lieu d'afficher un formulaire de connexion. –

Questions connexes