2010-01-19 8 views
5

En ASP.Net, ¿alguien sabe de qué forma se salta la autenticación de formularios si se pasa un parámetro de cadena de consulta específica?Anulando la autenticación de formularios cuando se pasa una cadena de consulta

Tales como:

mydomain.com/myprotectedpage.aspx 

... Me gustaría estar protegido por la autenticación de formularios (y por lo tanto, redirige a la página de Conexión)

mydomain.com/myprotectedpage.aspx?myBypassParameter=me 

... Me gustaría que la página renderizar como normal

¿Es esto posible?

+0

Posible duplicado: http://stackoverflow.com/questions/1991242/logging-users-in-automatically-via-an-url – Greg

Respuesta

3

No es realmente ninguna forma "oficial" de hacerlo.

Se podría hacer lo que hago, es tener una página de base en lugar de system.web.ui.page así:

Public MustInherit Class ProtectedPage 
Inherits System.Web.UI.Page 

Private Sub Page_InitComplete(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.InitComplete 
    If User.Identity.IsAuthenticated = False Then 
     If String.IsNullOrEmpty(Request.QueryString("myBypassParameter")) Then 
      FormsAuthentication.RedirectToLoginPage() 
     End If 
    End If 
End Sub 

End Class

+0

Gracias, esperaba alguna solución mágica, pero esto probablemente va a ser la mejor opción. – Paul

0

En su código detrás, se puede usar simplemente Request.QueryString["myBypassParameter"] y compruebe su valor. Si se trata de un valor no válido, utilice FormsAuthentication.RedirectToLoginPage o una redirección personalizada para volver a colocar al usuario en la página de inicio de sesión. Sin embargo,, esto no parece ser un método seguro para proteger una página. ¿Qué pasa si alguien obtiene el parámetro específico y logra acceder a su página protegida? Además, debe asegurarse de que el valor de QueryString sea válido (tal vez mediante una expresión regular) para garantizar que el usuario no haya pasado código malicioso que luego será leído por su aplicación.

+0

Tiene razón en que su respuesta no parece muy segura. –

+0

¿Ese es el motivo del vencimiento? ¿Para explicar cómo se hace, pero se recomienda no hacerlo? – keyboardP

+1

No obstante, no puedo criticar la respuesta. La inseguridad radica en la solicitud, no en la solución. –

0

Es posible que pueda introducir un código rápido en el evento Application_AuthenticateRequest. Luego puede probar el parámetro y ajustar User.Identity según sea necesario para permitir la página. Tendría que poner una verificación de página también para asegurarse de que no permitió este comportamiento en todas las páginas restringidas.

Sin embargo, no recomendaría este diseño. Si necesita tener acceso a un área protegida de forma anónima, sería mejor poner toda su funcionalidad en un UserControl y luego usar una versión protegida/desprotegida de una página principal. Esto te permitiría controlar qué sale y cuándo.

Cuestiones relacionadas