Pregunta

Estoy trabajando en un sitio web con una sección interna y otra externa.

Los usuarios de ambas secciones son diferentes, por lo que requieren una página de inicio de sesión diferente. Quería configurar la autenticación de manera diferente para ambas carpetas, pero ASP.Net pero no está permitido.

Ejemplo (en mi 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>

Y en la subcarpeta externa, trato de sobrescribir la configuración:

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

Sin embargo, esto me da un error.

Intenté ponerlos a ambos en sus subcarpetas, pero recibo el mismo error, la sección de configuración de autenticación debe establecerse en el nivel de la aplicación (supongo que eso significa la raíz web.config).


Una posible solución es centralizar la página de inicio de sesión y redirigir según el origen de la solicitud, si procede de una página externa, enviarla a la página de inicio de sesión externa, de lo contrario a la interna.

Funcionaría, pero si es posible me gustaría la solución donde puedo configurar esto en web.config.

Gracias

¿Fue útil?

Solución

Estoy confundido? ¿Por qué dos almacenes de datos de usuario? Entiendo lo interno frente a lo externo, pero si esta es la misma aplicación, puede asignar roles para otorgar más permisos a sus usuarios internos. Además, puede permitir que sus usuarios internos accedan al sitio desde su hogar sin VPN.

Aun así, si debe tener dos tiendas, su mejor opción es duplicar la aplicación. Puede ser la aplicación exacta, pero la pones en un servidor interno y uno externo. Luego puede autenticar a los usuarios en diferentes ubicaciones. Sin embargo, tenga en cuenta que aún necesita roles, a menos que esté cargando la aplicación.

Si necesita autenticarse en dos tiendas, puede hacerlo con un proveedor personalizado. El modelo de inicio de sesión ASP.NET permite proveedores personalizados y es muy fácil construir uno: http://msdn.microsoft.com/en-us/library/f1kyba5e. aspx http://msdn.microsoft.com/en-us/library/aa479048. aspx

Ahora, si debe redirigir a diferentes páginas (¿está atrapado en este modelo por alguna razón?), posiblemente puede hacerlo por dirección IP. Es probable que su red interna utilice un esquema de IP de 10 puntos o 192 puntos. Si es así, esas direcciones se transfieren a internas. El resto a externo. Esto requerirá que configure algo que redirija. Sé que puede hacer esto en la página de inicio de sesión, si no con un controlador HTTP.

Sin embargo, esto parece mucho trabajo. Todavía no veo la imagen de por qué tienes que realizar la tarea de esta manera.

Otros consejos

Si puede ejecutar como dos aplicaciones IIS diferentes, entonces puede tener diferentes proveedores de autenticación (o diferentes instancias del mismo proveedor ... posiblemente usando la misma base de datos con el atributo de aplicación en el proveedor para distinguir).

Pero diferentes aplicaciones web significa que no hay estado compartido (Aplicación y Sesión) y duplica la instalación. Para una intranet / internet, esto permitiría que la implementación externa no incluya componentes a los que ningún usuario de Internet pueda acceder (y así mejorar la seguridad al reducir el área de superficie).

De lo contrario, es posible que necesite un proveedor de autenticación personalizado que reenvíe a uno de los integrados, según quién inicie sesión.

Si su sitio es una aplicación web única, probablemente podría usar el modelo de proveedor de roles ASP.NET para eso, teniendo dos roles, uno para páginas internas y otro para páginas externas (puede configurar esa carpeta de pr con el < !> lt; location > elemento de configuración).

Para obtener más información, consulte http://msdn.microsoft.com/ es-es / library / 9ab2fxh0.aspx

Tengo una manera simple de manejar esto que podría ser útil para alguien. Básicamente quiero poder usar el mismo código para un inicio de sesión de invitado y un usuario registrado. También tengo una versión móvil del sitio web que quiero enviar a una página de inicio de sesión diferente cuando caduque el ticket de autenticación.

Probablemente no sea la solución más elegante, pero lo suficientemente 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

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

Luego, en su página de inicio de sesión (la especificada en su 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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top