2009-03-09 4 views
2

Je travaille sur un site web avec une section interne et externe.Comment avoir plusieurs connexions avec ASP.Net?

Les utilisateurs pour les deux sections sont différentes de sorte qu'ils ont besoin d'une page de connexion différente. Je voulais configurer l'authentification différemment pour les deux dossiers, mais ASP.Net mais ce n'est pas autorisé.

Exemple (dans mon principal web.config):

<authentication mode="Forms"> 
    <forms loginUrl="~/Pages/Internal/Main.aspx" defaultUrl="~/Pages/Internal/Main.aspx" cookieless="UseDeviceProfile" name=".ApplicationAuthenticatedUser" path="/" protection="All" slidingExpiration="true" timeout="45"/> 
</authentication> 

Et dans le sous-dossier externe, j'essaie de remplacer les paramètres:

<authentication mode="Forms"> 
    <forms loginUrl="~/Pages/External/Default.aspx" defaultUrl="~/Pages/External/Default.aspx" cookieless="UseDeviceProfile" name=".ApplicationAuthenticatedUser" path="/Pages/External" protection="All" slidingExpiration="true" timeout="45"/> 
</authentication> 

Cependant, cela me donne une erreur.

J'ai essayé de mettre les deux dans leurs sous-dossiers mais j'ai la même erreur, la section de configuration d'authentification doit être définie au niveau de l'application (je suppose que cela signifie la racine web.config).


Une solution possible est de centraliser la page de connexion et de rediriger en fonction de l'endroit où la demande est venue, si elle venait d'une page externe, envoyez-le à la page de connexion externe, sinon à l'interne.

Il travaillerait, mais s'il est possible que je voudrais la solution où je peux le configurer dans le web.config.

Merci

Répondre

1

Je suis confus? Pourquoi deux magasins de données utilisateur? Je comprends interne et externe, mais si c'est la même application, vous pouvez assigner des rôles pour donner plus d'autorisations à vos utilisateurs internes. En outre, vous pouvez autoriser vos utilisateurs internes à accéder au site depuis leur domicile sans VPN.

Même si, si vous devez avoir deux magasins, votre meilleur pari est duper l'application. Cela peut être l'application exacte, mais vous le mettez sur un serveur interne et un externe. Ensuite, vous pouvez authentifier les utilisateurs à différents endroits. Notez cependant que vous avez toujours besoin de rôles, à moins que vous ne corrigiez l'application.

Si vous devez vous authentifier contre deux magasins, vous pouvez le faire avec un fournisseur personnalisé. L'ASP.modèle de connexion NET permet aux fournisseurs personnalisés et il est très facile de construire un: http://msdn.microsoft.com/en-us/library/f1kyba5e.aspx http://msdn.microsoft.com/en-us/library/aa479048.aspx

Maintenant, si vous devez rediriger vers des pages différentes (vous êtes coincé dans ce modèle pour une raison quelconque?), vous pouvez éventuellement faire par adresse IP. Il est probable que votre réseau interne utilise un schéma IP de 10 points ou 192 points. Si c'est le cas, ces adresses sont transférées en interne. Le reste à l'extérieur. Cela vous demandera de configurer quelque chose qui fait la redirection. Je sais que vous pouvez le faire sur la page de connexion, si ce n'est avec un gestionnaire HTTP.

Cela semble toutefois être un énorme travail. Je ne vois toujours pas l'image de pourquoi vous devez accomplir la tâche de cette manière.

+0

Cela ne me dérange pas d'avoir le même magasin de données utilisateur, je veux juste différentes pages de connexion (et possibily configurations différentes pour les deux comme le délai d'expiration). – mbillard

0

Si vous pouvez exécuter en tant que deux applications IIS différentes alors vous pouvez avoir différents fournisseurs d'authentification (ou plusieurs instances du même fournisseur ... peut-être en utilisant la même base de données avec l'attribut d'application sur le fournisseur de distinguer).

Mais différentes applications web signifie pas d'état partagé (application et de session) et dupliquer l'installation. Pour un intranet/internet, cela permettrait au déploiement externe de ne pas inclure de composants auxquels aucun internaute ne peut accéder (et donc d'améliorer la sécurité en réduisant la surface).

Sinon, vous pourriez avoir besoin d'un fournisseur d'authentification personnalisé qui transmet à l'un des construit en ceux en fonction de qui vous connecter.

+0

C'est une possibilité, mais je perds trop en faisant cela. – mbillard

0

Si votre votre site est une application Web unique, vous pouvez probablement utiliser l'ASP.NET rôle modèle de fournisseur pour que, ayant deux rôles, l'un pour interne et un pour les pages externes (vous pouvez configurer que pr. dossier avec l'emplacement < élément de configuration >).

Pour plus d'informations, consultez http://msdn.microsoft.com/en-us/library/9ab2fxh0.aspx

+0

Je l'ai, je veux juste un moyen de rediriger automatiquement les utilisateurs qui tentent d'accéder à une page externe à la connexion externe. – mbillard

0

J'ai un moyen simple de gérer cela qui pourrait être utile à quelqu'un. Je veux essentiellement pouvoir utiliser le même code pour une connexion d'invité et un utilisateur enregistré. J'ai également une version mobile du site Web que je veux envoyer à une autre page de connexion lorsque le ticket d'authentification expire.

Probablement pas la solution la plus élégante, mais assez simple:

Public Sub btnSubmit_Click(ByVal sender As Object, ByVal e As EventArgs) 
     If Page.IsValid Then 
      Dim userLogin As String = "" 

      userLogin = System.Guid.NewGuid.ToString 
      FormsAuthentication.RedirectFromLoginPage(userLogin, False) 
      ' place a url param throughout my app, only four pages so no 
      ' big problem there in this case g stands for guest   
      Response.Redirect("menu.aspx?m=g", False) 

     End If 
End Sub 

Puis, en Global.asax:

Protected Sub Application_AuthenticateRequest(ByVal sender As Object, ByVal e As System.EventArgs) 

     If Not Request.IsAuthenticated And _ 
(Not Request.RawUrl.ToLower.Contains("guestlogin.aspx")) And _ 
(Not Request.RawUrl.ToLower.Contains("registeredlogin.aspx")) And _ 
(Not Request.RawUrl.ToLower.Contains("mobilelogin.aspx")) Then 
      Response.Redirect("spLogin.aspx?m=" & Request.QueryString("m")) 
     End If 

    End Sub 

Ensuite, dans votre page de connexion (celui indiqué dans votre site Web. config):

 Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
      If Not Page.IsPostBack Then 
    if request.querystring("m")="g" then 
        Response.Redirect("guestlogin.aspx?m=g") 

    elseif request.querystring("m")="r" then 
        Response.Redirect("registeredlogin.aspx?m=r") 
    elseif request.querystring("m")="m" then 
        Response.Redirect("mobilelogin.aspx?m=m") 

end if 
End If 
End Sib 
Questions connexes