with net example asp c# asp.net-mvc asp.net-web-api authorization

c# - net - web api authentication example



Autorizaciones personalizadas en Web.API (2)

El método que usamos es un atributo ApiAuthorize personalizado que hereda de System.Web.Http.AuthorizeAttribute. por ejemplo:

public class ApiAuthorizeAttribute : AuthorizeAttribute { readonly CreditPointModelContext _ctx = new CreditPointModelContext(); public override void OnAuthorization(System.Web.Http.Controllers.HttpActionContext actionContext) { if(Authorize(actionContext)) { return; } HandleUnauthorizedRequest(actionContext); } protected override void HandleUnauthorizedRequest(System.Web.Http.Controllers.HttpActionContext actionContext) { var challengeMessage = new System.Net.Http.HttpResponseMessage(System.Net.HttpStatusCode.Unauthorized); challengeMessage.Headers.Add("WWW-Authenticate", "Basic"); throw new HttpResponseException(challengeMessage); } private bool Authorize(System.Web.Http.Controllers.HttpActionContext actionContext) { try { //boolean logic to determine if you are authorized. //We check for a valid token in the request header or cookie. } catch (Exception) { return false; } } }

Mi comprensión de ASP.NET MVC es que para autorizaciones debería usar algo como -

public class IPAuthorize : AuthorizeAttribute { protected override bool AuthorizeCore(HttpContextBase httpContext) { //figure out if the ip is authorized //and return true or false }

Pero en la API web, no hay AuthorizeCore(..) .

Hay una OnAuthorization(..) y el consejo general para MVC es no utilizar OnAuthorization(..) .

¿Qué debería usar para las autorizaciones personalizadas en la API web?


No estoy de acuerdo con la oposición en absoluto,

La autorización se realiza en un filtro de autorización, es decir, deriva de System.Web.Http.AuthorizeAttribute e implementa el método IsAuthorized.

No implementa la autorización en un filtro de acción normal porque se ejecutan más tarde en la canalización que los filtros de autorización.

Tampoco implementa la autenticación en un filtro (como el análisis de un JWT); esto se hace incluso antes en un punto de extensibilidad llamado MessageHandler.