Question

Je travaille sur un site Web avec une section interne et une section externe.

Les utilisateurs des deux sections étant différents, ils nécessitent 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 fichier web.config principal):

<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 les mettre tous les deux dans leurs sous-dossiers, mais le même message d'erreur s'affiche: la section de configuration de l'authentification doit être définie au niveau de l'application (j'imagine que cela signifie que le répertoire web.config est la racine.)

Une solution possible consiste à centraliser la page de connexion et à la rediriger en fonction de l'origine de la demande. Si elle provient d'une page externe, envoyez-la sur la page de connexion externe, sinon vers la page interne.

Cela fonctionnerait, mais s'il est possible, j'aimerais connaître la solution permettant de le configurer dans le fichier Web.config.

Merci

Était-ce utile?

La solution

Je suis confus? Pourquoi deux magasins de données utilisateur? Je comprends interne ou externe, mais s'il s'agit de la même application, vous pouvez attribuer des rôles pour accorder plus d'autorisations à vos utilisateurs internes. De plus, vous pouvez autoriser vos utilisateurs internes à accéder au site depuis leur domicile sans VPN.

Même dans ce cas, si vous devez avoir deux magasins, votre meilleur pari est de duper l’application. Ce peut être l'application exacte, mais vous la mettez sur un serveur interne et sur un externe. Ensuite, vous pouvez authentifier les utilisateurs à différents endroits. Notez toutefois que vous avez toujours besoin de rôles, à moins que vous n'utilisiez l'application.

Si vous devez vous authentifier auprès de deux magasins, vous pouvez le faire avec un fournisseur personnalisé. Le modèle de connexion ASP.NET autorise les fournisseurs personnalisés et il est très facile d’en créer un: http://msdn.microsoft.com/en-us/library/f1kyba5e. aspx http://msdn.microsoft.com/en-us/library/aa479048. aspx

Maintenant, si vous devez rediriger vos pages vers différentes pages (vous êtes bloqué dans ce modèle pour une raison quelconque?), vous pouvez éventuellement le faire par adresse IP. Il est probable que votre réseau interne utilise un schéma IP à 10 points ou à 192 points. Si tel est le cas, ces adresses sont transférées en interne. Le reste à l'externe. Cela vous obligera à configurer quelque chose qui effectue 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 un travail énorme. Je ne vois toujours pas pourquoi vous devez accomplir la tâche de cette manière.

Autres conseils

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

Mais différentes applications Web ne signifient aucun état partagé (Application et Session) et ne dupliquent l’installation. Pour un intranet / Internet, cela permettrait au déploiement externe de ne pas inclure de composants auxquels aucun utilisateur d’Internet n’a accès (et donc d’améliorer la sécurité en réduisant la surface).

Sinon, vous aurez peut-être besoin d'un fournisseur d'authentification personnalisé qui transmet à l'un des fournisseurs intégrés, en fonction de la personne qui se connecte.

Si votre site est une application Web unique, vous pouvez probablement utiliser le modèle Fournisseur de rôle ASP.NET pour cela, avec deux rôles, un pour les pages internes et un pour les pages externes (vous pouvez configurer ce dossier pr. avec le < !> lt; location > élément de configuration).

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

J'ai un moyen simple de gérer cela qui pourrait être utile à quelqu'un. Je veux fondamentalement pouvoir utiliser le même code pour une connexion en tant qu'invité et un utilisateur enregistré. J'ai également une version mobile du site Web que je veux envoyer vers une page de connexion différente à l'expiration du ticket d'authentification.

Ce n’est probablement pas la solution la plus élégante, mais elle est 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

Ensuite, dans 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 (celle spécifiée dans votre 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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top