Pregunta

Estoy trabajando en una herramienta interna basada en web para mi empresa.Parte de esta herramienta es otra aplicación (The Cruise Control Dashboard) que se ejecuta en su propio directorio virtual bajo mi aplicación raíz.

Quería limitar el acceso a esta aplicación interna configurando la autenticación de formularios y teniendo un formulario de inicio de sesión en la aplicación raíz.

Puse lo siguiente en las aplicaciones raíz web.config:

<location path="ccnet">
  <system.web>
    <authentication mode="Forms">
        <forms loginUrl="/default.aspx" timeout="5000"/>
    </authentication>
    <authorization>
      <allow users="?"/>
      <deny users="?"/>
    </authorization>        
  </system.web>    
</location>

Sin embargo, la autenticación de formularios no parece funcionar, no redirige a la página de inicio de sesión cuando accedo directamente a esa aplicación.

Tengo la sensación de que tengo las etiquetas <allow> y <deny> configuradas incorrectamente.¿Alguien puede aclarar?

¿Fue útil?

Solución

Es posible que también necesites poner path="/" en las etiquetas <forms, creo.Lo siento, ha pasado un tiempo desde que hice esto.

Otros consejos

Es posible que también necesites poner path="/" en el

¡Eso fue todo!

Entonces, Resumen, para hacer esto;

En la raíz web.config agregue:

<machineKey validationKey="AutoGenerate" decryptionKey="AutoGenerate" validation="SHA1" />

Esto debe hacerse porque por defecto es "AutoGenerate,IsolateApps".

En segundo lugar, debes nombrar la cookie de autenticación del mismo modo en ambos. Hice todo esto en mi raíz, usando la etiqueta de ubicación:

<authentication mode="Forms">
   <forms name="ccAuth" loginUrl="/default.aspx"  path="/" timeout="5000"/>
</authentication>
<authorization>
   <deny users="?"/>
</authorization>

Finalmente:

<location path="ccnet">
  <system.web>
    <authentication mode="Forms">
      <forms name="ccAuth" loginUrl="/default.aspx"  path="/" timeout="5000"/>
    </authentication>
    <authorization>
      <deny users="?"/>
    </authorization>      
  </system.web>    
</location>

Gracias a todos por su ayuda.Esto fue un obstáculo.

FormsAuthentication cifra los tokens que proporciona al usuario y, de forma predeterminada, cifra claves diferentes para cada aplicación.Para que Forms Auth funcione en todas las aplicaciones, hay un par de cosas que debes hacer:

En primer lugar, establezca el "nombre" de autenticación de formularios igual en todas las aplicaciones.Esto se hace con:

<authentication mode="Forms">  
    <forms name="{name}" path="/" ...>
</authentication>

Configure el "nombre" para que sea el mismo en ambas aplicaciones web.configs.

En segundo lugar, debe indicarles a ambas aplicaciones que utilicen la misma clave al cifrar.Esto es un poco confuso.Cuando estaba configurando esto, todo lo que tenía que hacer era agregar lo siguiente a ambos web.configs:

<machineKey validationKey="AutoGenerate" decryptionKey="AutoGenerate" validation="SHA1" />

Según los documentos, ese es el valor predeterminado, pero no funcionó para mí a menos que lo especificara.

Eso no funciona, aún permite que todos los usuarios (autenticados o no) accedan.

Creo que incluso podrías omitir la etiqueta de permiso, ya que es redundante.Justo:

<deny users="?"/>

¿Dónde queda ese código, Jonathan?En mi experiencia, tengo un control de inicio de sesión y en el evento OnAuthenticate establecería Autenticado en falso...

If CustomAuthenticate(Login1.UserName, Login1.Password) Then
    FormsAuthentication.RedirectFromLoginPage(Login1.UserName, False)
Else
    e.Authenticated = False
End If

Pero eso es usar el Manera de Microsoft

estás permitiendo todos los no autenticados.Quizás estés buscando algo como esto

<deny users="?"/>

¿Cuál es la extensión de archivo de esta aplicación de control de crucero?Si no es un tipo de archivo para el cual ASP.NET está registrado (p. ej.jsp, java, etc.), entonces ASP.NET no actuará como mecanismo de autenticación (en IIS 5 y 6).Por ejemplo, para archivos html estáticos, a menos que tenga implementado el mapeo de comodines, IIS realiza toda la autenticación y autorización y entrega el archivo sin involucrar la extensión isapi de ASP.NET.IIS7 puede utilizar el nuevo modo de canalización integrado para interceptar todas las solicitudes.Para IIS6, querrás mirar El artículo de Scott Gu sobre el tema..

Ninguna de las sugerencias anteriores funcionó para mí.Resulta que en el conjunto raíz web.config:

<forms loginUrl="/pages/login.aspx" enableCrossAppRedirects="true"...

y asegúrese de que tanto la aplicación raíz como la secundaria estén en system.web

<machineKey validationKey="AutoGenerate" decryptionKey="AutoGenerate" validation="SHA1"/>

que desactiva el valor predeterminado de IsolateApps.

¡Entonces todo funcionó!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top