Domanda

Sto lavorando a un sito Web con una sezione interna ed una esterna.

Gli utenti di entrambe le sezioni sono diversi, quindi richiedono una pagina di accesso diversa. Volevo configurare l'autenticazione in modo diverso per entrambe le cartelle, ma ASP.Net ma non è consentito.

Esempio (nel mio web.config principale):

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

E nella sottocartella esterna, provo a sovrascrivere le impostazioni:

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

Tuttavia, questo mi dà un errore.

Ho provato a metterli entrambi nelle loro sottocartelle ma ho lo stesso errore, la sezione di configurazione dell'autenticazione deve essere impostata a livello di applicazione (suppongo significhi il root web.config).


Una possibile soluzione è centralizzare la pagina di accesso e reindirizzare a seconda della provenienza della richiesta, se proviene da una pagina esterna, inviarla alla pagina di accesso esterna, altrimenti a quella interna.

Funzionerebbe, ma se è possibile mi piacerebbe la soluzione in cui posso configurarlo in web.config.

Grazie

È stato utile?

Soluzione

Sono confuso? Perché due archivi dati utente? Capisco interno contro esterno, ma se questa è la stessa applicazione, puoi assegnare ruoli per dare più autorizzazioni ai tuoi utenti interni. Inoltre, puoi consentire agli utenti interni di accedere al sito da casa senza VPN.

Anche così, se devi avere due negozi, la soluzione migliore è duplicare l'applicazione. Può essere l'applicazione esatta, ma la metti su un server interno e uno esterno. Quindi è possibile autenticare gli utenti in diverse posizioni. Si noti, tuttavia, che sono ancora necessari ruoli, a meno che non si stia kludging sull'applicazione.

Se devi autenticarti con due negozi, puoi farlo con un provider personalizzato. Il modello di accesso ASP.NET consente ai provider personalizzati ed è molto semplice crearne uno: http://msdn.microsoft.com/en-us/library/f1kyba5e. aspx http://msdn.microsoft.com/en-us/library/aa479048. aspx

Ora, se devi reindirizzare a pagine diverse (sei bloccato in questo modello per qualche motivo?), puoi eventualmente farlo tramite indirizzo IP. È probabile che la tua rete interna utilizzi uno schema IP da 10 punti o 192 punti. In tal caso, tali indirizzi vengono trasferiti all'interno. Il resto all'esterno. Ciò richiederà l'impostazione di qualcosa che esegua il reindirizzamento. So che puoi farlo sulla pagina di accesso, se non con un gestore HTTP.

Questo sembra comunque un sacco di lavoro. Continuo a non vedere il motivo per cui devi svolgere il compito in questo modo.

Altri suggerimenti

Se è possibile eseguire due diverse applicazioni IIS, è possibile disporre di provider di autenticazione diversi (o istanze diverse dello stesso provider ... possibilmente utilizzando lo stesso database con l'attributo dell'applicazione sul provider per distinguere).

Ma diverse app Web significano nessuno stato condiviso (Applicazione e Sessione) e duplicazione dell'installazione. Per una rete intranet / Internet ciò consentirebbe alla distribuzione esterna di non includere componenti a cui nessun utente di Internet può accedere (e quindi migliorare la sicurezza riducendo la superficie).

Altrimenti potrebbe essere necessario un provider di autenticazione personalizzato che inoltri a uno di quelli integrati a seconda di chi sta effettuando l'accesso.

Se il tuo sito è una singola applicazione Web, potresti probabilmente utilizzare il modello del provider di ruoli ASP.NET per quello, con due ruoli, uno per le pagine interne e uno per le pagine esterne (puoi configurare quella cartella pr con il < !> lt; location > elemento di configurazione).

Per ulteriori informazioni, vedere http://msdn.microsoft.com/ it-it / library / 9ab2fxh0.aspx

Ho un modo semplice di gestirlo che potrebbe essere utile a qualcuno. Fondamentalmente voglio essere in grado di utilizzare lo stesso codice per un login ospite e un utente registrato. Ho anche una versione mobile del sito Web che desidero inviare a una pagina di accesso diversa allo scadere del ticket di autenticazione.

Probabilmente non la soluzione più elegante, ma abbastanza semplice:

    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

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

Quindi, nella tua pagina di accesso (quella specificata in 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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top