Pregunta

Estoy intentando crear mi propia clase de atributo IAuthorizationFilter . Básicamente, cada llamada a la API tiene un parámetro de cadena de consulta llamado 'clave' . Luego iba a decorar cualquier acción que lo requiera, con el simple atributo de autorización.

Esperaba que mi método OnAuthorization (..) simplemente extrajera el valor del parámetro de consulta, si se proporcionó. Si lo fuera, y es legítimo, el usuario está autorizado. de lo contrario, no lo son.

No estoy seguro de cómo hacer esto en el método OnAuthorization (..) .

¿O debería usar un IActionFilter en su lugar?

EDITAR: agregué un código para mostrar lo que estoy haciendo ...

public void OnAuthorization(AuthorizationContext filterContext)
{
    if (filterContext == null)
    {
        throw new ArgumentNullException("filterContext");
    }

    ApiKey apiKey = null;
    string queryStringKey = filterContext.HttpContext.Request.QueryString["key"];
    if (!string.IsNullOrEmpty(queryStringKey))
    {
        apiKey = GetApiKey(queryStringKey); // Custom code that checks a dictionary.
    }

    // Do we have a key?
    if (apiKey == null)
    {
        filterContext.Result = new HttpUnauthorizedResult();
    }

    // TODO: Is this key allowed for this domain?

    // All is good, so don't do anything else.
}
¿Fue útil?

Solución

Debería poder inspeccionar la propiedad HttpContext.Request.QueryString del parámetro AuthorizationContext pasado al método OnAuthorization.

Para denegar el acceso en función del valor del valor de la cadena de búsqueda clave, puede establecer la propiedad Resultado del parámetro AuthorizationContext en un valor no nulo. Esto puede, si lo desea, establecerse en una instancia de la clase HttpUnauthorizedResult.

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