2009-09-16 4 views
1

Ok, voici le problème:traiter l'authentification en asp.net utilisant l'adhésion

J'ai deux sites: www.mysite.com et blog.mysite.com (noms de site faux) qui supposent de partager l'authentification. La page de connexion est www.mysite.com/login/login.aspx

Maintenant, le site de blog a web.config avec la section d'authentification suivante:

<authentication mode="Forms"> 
    <forms timeout="50000000" 
    loginUrl="http://www.mysite.com/login/login.aspx" 
    defaultUrl="~/"/> 
</authentication> 
<authorization> 
    <deny users="?"/> 
</authorization> 

Maintenant, je frappe blog.mysite.com/andrey/page.aspx et il me réoriente à la page de connexion qui se trouve sur le site www. Le vrai problème est que la chaîne de requête "reditect" ne contiendra que l'URL de la page relative (andrey/page.aspx), donc quand je me connecterai, elle essaiera de me rediriger vers www.mysite.com/andrey/page.aspx, pas blog.mysite.com/andrey/page.aspx où j'ai démarré alors bien sûr tout échoue.

Existe-t-il un moyen de dire à l'objet Membership d'insérer le chemin complet dans le paramètre de chaîne de requête "redirect" lorsqu'il rebondit sur la page de connexion?

Merci! Andrey

Répondre

1

En supposant que chaque domaine a son propre web.config, je pense que cela pourrait fonctionner.

1) Créer une page de connexion pour les www.mysite.com et blog.mysite.com
2) Le point à la fois à la même base de données des membres
3) Assurez-vous que les deux ont la même composition applicationName ensemble d'attributs:

<membership><providers><add applicationName="mySite"> 

4) Assurez-vous que les deux ont les mêmes formes d'attribution du nom:

<authentication mode="Forms"><forms name="mySite"> 

Cela devrait veiller à ce que les deux sites utilisent la même base de données des membres et même Authen cookie de tication, mais ils vont utiliser leurs pages de connexion individuelles et donc l'url de retour devrait être bien.


Pouvez-vous appeler le FormsAuthentication.SetAuthCookie Method et rediriger manuellement sur http referrer?


Je viens de voir cela dans la documentation FormsAuthentication.RedirectFromLoginPage

Par défaut, la variable ReturnUrl doit se référer à une page dans l'application en cours . Si ReturnUrl fait référence à une page dans une autre application ou sur un autre serveur, la méthode RedirectFromLoginPage redirige vers l'URL de la propriété DefaultUrl. Si vous voulez permettre redirige vers une page en dehors de l'application en cours , vous devez définir la propriété EnableCrossAppRedirects à vrai en utilisant les enableCrossAppRedirects attribut des formes élément configuration .Sécurité noteSecurity Note:

Réglage des EnableCrossAppRedirects propriété sur true pour permettre l'application croisée est une menace réoriente de sécurité potentielle . Lorsque réoriente inter-applications sont autorisés, votre site est vulnérable aux sites Web malveillants qui utilisent votre page de connexion pour convaincre votre site Web utilisateurs qu'ils utilisent une page sécurisé sur votre site. Pour améliorer la sécurité lors de l'utilisation des redirections inter-applications , vous devez remplacer la méthode RedirectFromLoginPage pour autoriser les redirections uniquement vers les sites Web approuvés.

Est-ce que jouer avec cette propriété aide du tout?

+0

Eh bien, je voulais toujours avoir un endroit pour me connecter au portail. Des idées pour contrôler RedirectUrl? Tout ce que je pouvais faire avec, jusqu'ici, est de désosser et de renommer la classe FormsAuthenticationModule, d'apporter des modifications afin qu'elle place l'URL entière dans redirectUrl, et d'utiliser ce module au lieu de la classe FormsAuthenticationModule de Microsoft. – Andrey

+0

Non, je ne connais aucun moyen de le faire. Si les deux pages de connexion semblaient exactement les mêmes à l'exception de l'URL, et que chacune d'elles puisse vous connecter aux deux sites, cela ne me semble pas vraiment différent d'une expérience utilisateur d'un lieu de connexion au portail. – Greg

+0

D'accord, mais j'ai effectivement 7 sites et la page de connexion de soutien pour chacun d'eux est une surcharge inutile si elle peut être évitée. Je suppose que je vais devoir réécrire la classe FormsAuthenticationModule pour répondre à mes besoins ... – Andrey

Questions connexes