En nuestra aplicación ASP.NET MVC, redirigimos automáticamente a los usuarios a una página de inicio de sesión a través de la sección <authentication>
de <system.web>
cuando intentan acceder a una página de solo autorización. El problema es que una acción en el medio de la aplicación, diseñada para ser utilizada por una herramienta, debe devolver una respuesta HTTP 401 directa en caso de acceso incorrecto. ¿Cómo puedo devolver un código HTTP 401 real sin el redireccionamiento para esta acción específica?Anular autenticación de formularios ASP.NET para una sola página
Respuesta
La siguiente solución funciona, aunque no estoy del todo seguro de que es óptima:
public class HttpAuthenticationRequiredResult : ActionResult
{
public override void ExecuteResult(ControllerContext context)
{
var response = context.HttpContext.Response;
response.StatusCode = 401;
response.AddHeader("WWW-Authenticate", "Basic realm=\"whatever\"");
response.Flush();
response.Close();
}
}
A continuación, puede devuelve el resultado anterior en lugar de HttpUnauthorizedResult para generar el código 401 requerido. Sin embargo, esto se siente bastante optimista para mí.
Usted puede tener distintas secciones para <system.web>
caminos separados. He aquí un ejemplo:
<configuration>
<location path="Foo/Bar.aspx">
<system.web>
<authorization>
<allow roles="GoodGuys" />
<deny users="*"/>
</authorization>
</system.web>
</location>
</configuration>
En este caso, la página "Foo/Bar.aspx" se permite a la gente con el papel goodguys, pero negó a todos los demás.
En su caso, es posible que desee permitir a todos sin autenticación:
<configuration>
<location path="Foo/Bar.aspx">
<system.web>
<authentication mode="None" />
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>
</configuration>
Tenía un caso similar en el que necesitaba devolver algo que desencadenaba un redireccionamiento no deseado (básicamente, un mensaje sobre cómo la autenticación falló y estaba redirigiendo a la pantalla de inicio de sesión sin la información de error).
Esto resolvió el problema:
Response.SuppressFormsAuthenticationRedirect = true;
- 1. ASP.NET: deshabilitar la autenticación para una sola página aspx (página de error personalizada)?
- 2. Autenticación de formularios de Asp.net
- 3. Autenticación para usuarios en una aplicación de una sola página?
- 4. Autenticación de formularios de ASP.NET y una subcarpeta "Sin autenticación"
- 5. ¿Agregar una sola página de ASP.Net MVC a una aplicación de formularios web existente?
- 6. Autenticación de formularios + ASP.NET MVC absolute ReturnURL
- 7. ASP.NET Formularios mixtos/Autenticación de Windows
- 8. ASP.NET Página maestra DefaultButton anular
- 9. Autenticación de formularios ASP.NET y autenticación persistente Cookie Security
- 10. Múltiples formularios en una sola página HTML: cómo restringir la tabulación a una sola forma?
- 11. Autenticación de formularios de ASP.NET impide cargar javascript en Login.aspx
- 12. Asp.Net Autenticación de formularios al usar el iPhone UIWebView
- 13. Múltiples formularios en la página ASP.NET
- 14. webforms vs asp.net mvc para la aplicación de una sola página, ¿cuál elegir?
- 15. Autenticación de formularios de ASP.NET en servidores de carga equilibrada
- 16. personalizada IPrincipal con la autenticación de formularios de ASP.NET MVC
- 17. Autenticación de formularios MVC de ASP.NET + Autorizar atributo + Roles simples
- 18. Servicio web ASP.NET dentro de la aplicación Autenticación de formularios
- 19. Autenticación de formularios
- 20. Cambiar contraseña de usuario en autenticación de formularios ASP.NET
- 21. Suplantación de usuario con Autenticación de formularios de ASP.NET
- 22. Autenticación de formularios de mezcla con autenticación de Windows
- 23. Suplantar usando Autenticación de formularios
- 24. ASP.NET MVC Autenticación de formularios contra el servicio web externo
- 25. Recordarme la funcionalidad en ASP.NET Autenticación de formularios no funciona
- 26. Autenticación de formularios para diferentes roles?
- 27. ¿Permitir autenticación anónima para una sola carpeta en web.config?
- 28. autenticación de Windows vs autenticación de formularios
- 29. ¿cómo funciona la autenticación de formularios en asp.net?
- 30. Cómo hacer formularios Autenticación en páginas puramente HTML utilizando ASP.NET?
Si esto fuera recta de ASP.NET, que quiere trabajar, pero estoy claro cómo utilizar esta técnica con ASP.NET MVC. El problema es que las URL de deber-devolver-401 están en myapp/{parámetro de ruta}/herramienta; no hay forma de especificar eso en system.web, incluso si quisiera. –
* blush * No vi "MVC" cuando leí tu publicación. – Randolpho
Aunque esto funciona para el elemento de la autorización, que no funciona para la autenticación - me sale el siguiente error: producido un error durante el procesamiento de un archivo de configuración necesario para atender esta solicitud. Revise los detalles de error específicos a continuación y modifique su archivo de configuración de manera adecuada. Es un error utilizar una sección registrada como allowDefinition = 'MachineToApplication' más allá del nivel de la aplicación. –