Простой способ проверить ключ API в веб-API ASP.NET Core

Я хотел бы просто проверить наличие ключа API, отправленного в заголовке авторизации, прежде чем разрешать доступ к определенным конечным точкам веб-API. Ради этого вопроса предположим, что ApiKey — это 12345. Я просто хочу проверить значение этого ключа API до достижения определенного метода действия. Я не могу понять, требует ли это пользовательского AuthorizeAttribute или фильтра действий.


person Brian David Berman    schedule 03.12.2018    source источник


Ответы (1)


Просто я делаю запрос GET с заголовком Authorization: apiKey 12345

Реализация атрибута авторизации выглядит следующим образом:

public class AuthorizationFilterAttribute : Attribute, IAuthorizationFilter
{
    public void OnAuthorization(AuthorizationFilterContext context)
    {
        var apiKey = context.HttpContext.Request.Headers["Authorization"];

        if (apiKey.Any())
        {
            // this would be your business
            var subStrings = apiKey.ToString().Split(" ");
            if (!(subStrings.Length >= 2 && subStrings[0] == "apiKey" && subStrings[1].Any()))
            {
                context.Result = new NotFoundResult();
            }
        }
        else
        {
            context.Result = new NotFoundResult();
        }
    }
}

В этом примере кода apiKey равно subStrings[1]

person Khai Nguyen    schedule 03.12.2018
comment
Как это вызывается/используется? Декоратор атрибутов? Прошивается в конфиге? - person Brian David Berman; 04.12.2018
comment
Это атрибут, и мы вызываем его с помощью [TypeFilter(typeof(AuthorizationFilterAttribute))] или [AuthorizationFilterAttribute] при действии. - person Khai Nguyen; 04.12.2018