Uso de ASP.NET MVC Estoy creando un atributo Authorize personalizado para encargarse de alguna lógica de autorización personalizada. He analizado muchos ejemplos y es bastante directo, pero mi pregunta es ¿qué método es mejor anular, AuthorizeCore o OnAuthorization? He visto muchos ejemplos que anulan uno u otro. ¿Hay una diferencia?Extienda AuthorizeAttribute Omita AuthorizeCore o OnAuthorization
Respuesta
La idea es en los tipos de retorno:
AuthorizeCore
devuelve un valor lógico - es hacer decisión código. Esto se debe limitar a mirar a la identidad y las pruebas del usuario y que los papeles están en etc, etc Básicamente se debe responder a la pregunta: ¿
Do I want this user to proceed?
No debe llevar a cabo cualquier actividad adicional "en el lado".
OnAuthorize
vuelve inválido - aquí es donde pone funcionalidad que debe ocurrir en este momento. p.ej. Escribir en un registro, almacenar algunos datos en sesión, etc.
Gracias por la información –
Desafortunadamente AuthorizeCore no lo hace contener el AuthorizationContext que necesito (para acceder a RouteData y tomar decisiones basadas en él), por lo tanto, el único enfoque que veo es usar OnAuthorize. – gw0
¿Por qué en la Tierra no está 'AuthorizationContext' pasado a' AuthorizeCore'? Esto parece ser un gran defecto. – Jez
Debe colocar cualquier código que se ejecute independientemente de si el usuario está siendo autorizado por primera vez, o si está utilizando una autorización en caché en AuthorizeCore
.
Si mira el código fuente, puede ver que AuthorizeCore
es llamado por OnAuthorize
y OnCacheAuthorization
. Esto permite que la autorización se guarde en la memoria caché, pero aún permite ciertas acciones y toma las decisiones reales sobre la autorización.
Si necesita algo de AuthorizationContext, puede crear una propiedad para contener la información y luego acceder a ella en el método AuthorizeCore.
Desearía poder resaltar la última frase de su respuesta . Realmente deberías audaz. Refiriéndonos al comentario de @ gw0 en la respuesta aceptada, lo que es realmente desafortunado es que la sugerencia de usar la anulación incorrecta por el motivo equivocado fue votada. –
La documentación de AuthorizeAttribute (MSDN) establece claramente (en Seguridad de subprocesos) _ "No se garantiza que ningún miembro de instancia sea seguro para subprocesos." _ Supongo que mantener información en una propiedad no es una opción. – bvgheluwe
@BartVG - No estoy seguro de seguir. ¿Qué tiene que ver la seguridad de los hilos con esta discusión? Todo lo que el texto significa es que tiene que sincronizar el acceso a los objetos si se va a usar de múltiples hilos. –
- 1. ASP.NET IAuthorizationFilter OnAuthorization
- 2. Custom MVC AuthorizeAttribute para ASP.NET Web API
- 3. ¿Es posible usar RedirectToAction() dentro de una clase personalizada AuthorizeAttribute?
- 4. ASP.NET MVC AuthorizeAttribute pasando valores a ActionMethod?
- 5. AuthorizeAttribute v Application_AuthenticateRequest
- 6. Extienda MediaController para android
- 7. Cómo personalizar API web ASP.NET AuthorizeAttribute para requisitos inusuales
- 8. SimpleMembership, MVC4, AuthorizeAttribute y Roles
- 9. Extienda TTPhotoViewController con TTPhotoView personalizado
- 10. Extienda una subcadena usando PowerShell
- 11. Anulación AuthorizeCore en la costumbre Autorizar resultados de atributos en "ningún método adecuado para anular encontró" error
- 12. Overriding controller AuthorizeAttribute para una sola acción
- 13. ¿Por qué onAuthorization se ejecuta antes de la autenticación?
- 14. Omita el paso de deshacer en Vim
- 15. MVC 3 AuthorizeAttribute Redirigir con mensaje personalizado
- 16. ASP.NET MVC3 Detener la ejecución de la acción/controlador en la costumbre AuthorizeAttribute
- 17. Omita los encabezados IP con tcpdump
- 18. java foreach omita la primera iteración
- 19. Para que div extienda altura completa
- 20. Extienda el teclado virtual de Android
- 21. MySQL omita los primeros 10 resultados
- 22. impedir que se omita window.onload javascript
- 23. Copie y extienda objetos globales en javascript
- 24. Python 3.2 omita una línea en csv.DictReader
- 25. ¿Puedo hacer que RecursiveDirectoryIterator omita directorios ilegibles?
- 26. Extienda la extensión de archivo UITableView
- 27. ¿Cómo logras que GSON omita objetos nulos o vacíos y vacíe las matrices y listas?
- 28. ¿Cómo creo un AuthorizeAttribute personalizado que sea específico para el área, el controlador y la acción?
- 29. asp.net MVC 3 aplicando AuthorizeAttribute a las áreas
- 30. Omita un código si la computadora es lenta
descargar el código fuente en MVC4, http://aspnetwebstack.codeplex.com/SourceControl/changeset/view/e0115a823029#src%2fSystem.Web.Mvc%2fAuthorizeAttribute.cs – user1736525