Apikey аутентификация webapi core 2.1 - PullRequest
0 голосов
/ 08 января 2020

У меня есть служба, которая собирается отправлять некоторые сообщения моей конечной точке. Но мне нужно проверить эти сообщения, проверив, состоит ли заголовок http из фиксированного (на определенный период) ключа API и идентификатора. Я могу сделать это, проверив заголовок, но я не думаю, что это хорошая практика. Кто-нибудь знает, как проверить, что сообщение отправлено из сервиса?

Я нашел что-то, но это для core2.2, и мне нужно использовать 2.1 ... (https://github.com/mihirdilip/aspnetcore-authentication-apiKey)

Заранее спасибо

Ответы [ 3 ]

0 голосов
/ 09 января 2020

Вы можете проверить заголовок запроса в пользовательском промежуточном программном обеспечении, как показано здесь . Или вы можете использовать фильтр действий для проверки ключа API, см. Пример кода здесь .

0 голосов
/ 09 января 2020

Как я уже сказал, я хочу сделать это через промежуточное ПО, а не в конце конвейера http. Тем временем я нашел решение, оно простое, но оно работает.

Я создал класс с именем MiddelWareKeyValidation со следующим методом asyn c:

public async Task Invoke(HttpContext context)
        {
            if (!context.Request.Headers.Keys.Contains("X-GCS-Signature") || !context.Request.Headers.Keys.Contains("X-GCS-KeyId"))
            {
                context.Response.StatusCode = 400;      
                await context.Response.WriteAsync("User Key is missing");
                return;
            }
            else
            {
                var apiKey = new ApiKey { Signature = context.Request.Headers["X-GCS-Signature"], Key = context.Request.Headers["X-GCS-KeyId"] };

                if (!ContactsRepo.CheckValidUserKey(apiKey))
                {
                    context.Response.StatusCode = 401;
                    await context.Response.WriteAsync("Invalid User Key");
                    return;
                }
            }

            await _next.Invoke(context);
        }

Затем я go к моему Startup.cs в методе Configure, где я добавляю новое промежуточное ПО, например:

app.UseMiddleware<MiddelWareKeyValidation>();

Хороший ресурс и кредиты идут в эту статью: https://www.mithunvp.com/write-custom-asp-net-core-middleware-web-api/

0 голосов
/ 08 января 2020

Если у вас довольно много конечных точек, может быть, даже несколько контроллеров, я бы предложил написать промежуточное программное обеспечение для этого.

Но если эта проверка apikey необходима только для одной конечной точки. Так как вы сказали "моя конечная точка". Я бы рекомендовал просто проверить значение заголовка в действии контроллера / конечной точке

Пример:

[HttpGet]
public async Task<IActionResult> ExampleEndpoint() {
   var headerValue = Request.Headers["Apikey"];
   if(headerValue.Any() == false)
    return BadRequest(); //401

   //your endpoint code
   return Ok(); //200
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...