Precisa de alguma ajuda / aconselhamento com um personalizado classe ASP.NET MVC IAuthorizationFilter
-
06-07-2019 - |
Pergunta
eu estou tentando fazer minha própria classe atributo IAuthorizationFilter
. Basicamente, cada chamada de API tem um parâmetro de string de consulta chamado 'chave' . Eu estava indo em seguida, decorar quaisquer ações que exigem isso, com o atributo de autorização simples.
Eu estava esperando o meu método OnAuthorization(..)
, então, basta extrair o valor do parâmetro de consulta, se ele foi fornecido. Se era, e é legítimo, em seguida, o usuário está autorizado. caso contrário, eles não são.
Eu não tenho certeza de como fazer isso no método OnAuthorization(..)
.
Ou eu deveria estar usando um IActionFilter
vez?
EDIT: Eu adicionei em algum código para mostrar o que estou fazendo ...
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.
}
Solução
Você deve ser capaz de inspecionar o imóvel HttpContext.Request.QueryString do parâmetro AuthorizationContext passado para o método OnAuthorization.
Para negar o acesso com base no valor do valor Key querstring, você pode definir a propriedade Resultado do parâmetro AuthorizationContext para um valor não nulo. Isto pode, se quiser, ser definida como uma instância da classe HttpUnauthorizedResult.