Frage

Ich arbeite auf einer Website mit einem internen und einem externen Abschnitt.

Der Anwender für beiden Abschnitte sind unterschiedlich, so dass sie eine andere Login-Seite erfordern. Ich wollte die Authentifizierung unterschiedlich für beiden Ordner konfigurieren, aber ASP.Net, aber es ist nicht erlaubt.

Beispiel (in meinem Haupt-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>

Und im externen Unterordner, ich versuche, um die Einstellungen zu überschreiben:

<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>

Doch das gibt mir einen Fehler.

Ich habe versucht, sie beide in ihrem Unterordner setzen, aber ich die gleichen Fehler zu erhalten, muß der Authentifizierungskonfigurationsabschnitt auf der Anwendungsebene festgelegt werden (Ich vermute, das bedeutet, dass die Wurzel web.config).


Eine mögliche Lösung ist die Login-Seite zu zentralisieren und umleiten, je nachdem, wo die Anfrage kam, wenn es von einer externen Seite kam, an der externen Login-Seite senden, sonst den internen.

Es würde funktionieren, aber wenn es möglich ist, würde ich die Lösung gefällt, wo ich dies in der web.config konfigurieren können.

Danke

War es hilfreich?

Lösung

Ich bin verwirrt? Warum zwei speichert Benutzerdaten? Ich verstehe, intern gegen externe, aber wenn dies die gleiche Anwendung ist, können Sie Rollen zuweisen, um weitere Berechtigungen für Ihre internen Benutzer zu geben. Darüber hinaus können Sie Ihre internen Benutzer den Zugriff auf die Website von zu Hause aus, ohne VPN ermöglichen.

Auch so, wenn Sie zwei Geschäfte haben müssen, ist Ihre beste Wette ist düpieren die Anwendung. Es kann die genaue Anwendung sein, aber Sie setzen es auf einem internen Server und einem externen. Dann können Sie die Benutzer an verschiedenen Standorten authentifizieren. Beachten Sie jedoch, dass Sie immer noch Rollen benötigen, es sei denn, Sie die Anwendung kludging auf.

Wenn Sie gegen zwei Läden authentifizieren müssen, können Sie es tun mit einem benutzerdefinierten Anbieter. Das ASP.NET-Login-Modell ermöglicht die benutzerdefinierten Anbieter und es ist sehr leicht zu bauen: http://msdn.microsoft.com/en-us/library/f1kyba5e. aspx http://msdn.microsoft.com/en-us/library/aa479048. aspx

Wenn Sie nun auf verschiedene Seiten umleiten muss (Sie in diesem Modell aus irgendeinem Grund stecken?), Können Sie es möglicherweise Adresse von IP tun. Es ist wahrscheinlich das interne Netzwerk verwendet ein 10 Punkt oder 192 Punkt IP-Schema. Wenn ja, erhalten diese Adressen zu internen übertragen. Der Rest an externe. Dies erfordert, dass Sie etwas einrichten, der die Umleitung der Fall ist. Ich weiß, Sie können dies tun, auf der Login-Seite, wenn sie nicht mit einem HTTP-Handler.

Dies scheint wie eine Menge Arbeit, aber. Ich sehe nicht, noch das Bild, warum Sie die Aufgabe, auf diese Weise erreichen müssen.

Andere Tipps

Wenn Sie als zwei verschiedene IIS-Anwendungen ausführen, dann können Sie verschiedene Authentifizierungsanbieter (oder verschiedene Instanzen des gleichen Provider ... möglicherweise mit der gleichen Datenbank mit dem Anwendungsattribut auf dem Anbieter zu unterscheiden).

Aber verschiedene Web-Anwendungen bedeutet, dass keine gemeinsamen Zustand (Application und Session) und Duplizieren Sie die Installation. Für ein Intranet / Internet erlauben würde dies die externe Bereitstellung keine Komponenten enthält, die keine Internet-Nutzer (und damit die Sicherheit verbessern durch Reduzierung Oberfläche) zugreifen können.

Ansonsten könnten Sie einen benutzerdefinierten Authentifizierungsanbieter benötigen, die in denjenigen zu einem der integrierten leitet je nachdem, wer in einloggt.

Wenn Ihre Website eine einzelne Web-Anwendung ist, könnten Sie wahrscheinlich das ASP.NET Role Provider-Modell für diese Verwendung, zwei Rollen mit, ein für interne und einen externen Seiten (Sie, dass pr konfigurieren können. Ordner mit dem < Standort> Konfigurationselement).

Weitere Informationen finden Sie unter http://msdn.microsoft.com/ en-us / library / 9ab2fxh0.aspx

Ich habe eine einfache Art und Weise des Umgangs mit diesem, die Nutzungs jemand sein könnten. Ich möchte im Grunde den gleichen Code für einen Gast-Login verwenden zu können und ein registrierter Benutzer. Ich habe auch eine mobile Version der Website, die ich auf eine andere Login-Seite gesendet werden soll, wenn das Authentifizierungsticket abgelaufen ist.

Wahrscheinlich nicht die eleganteste Lösung, aber einfach:

    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

Dann in 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

Dann in Ihrer Login-Seite (die in Web.config angegeben):

        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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top