【问题标题】:Apikey authentication webapi core 2.1Api Key 认证 web api core 2.1
【发布时间】:2020-01-08 10:20:31
【问题描述】:

我有一些服务将向我的端点发送一些消息。但我需要通过检查 http 标头是否包含固定(一段时间)api 密钥和 id 来验证这些消息。我可以通过检查标题来做到这一点,但我认为这不是一个好习惯。有人知道如何验证消息是从服务发送的吗?

我找到了一些东西,但它适用于 core2.2,我需要使用 2.1... (https://github.com/mihirdilip/aspnetcore-authentication-apiKey)

提前致谢

【问题讨论】:

标签: asp.net-core asp.net-web-api2


【解决方案1】:

如果您有很多端点,甚至可能有多个控制器,我建议您编写一个中间件来处理这个问题。

但是如果这个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
}

【讨论】:

    【解决方案2】:

    您可以检查自定义中间件中的请求标头,如 here 所示。或者您可以使用操作过滤器来检查 api 密钥,请参见代码示例 here

    【讨论】:

      【解决方案3】:

      就像我说的那样,我想通过中间件而不是在 http 管道的末尾执行此操作。与此同时,我想出了一个解决方案,它很简单,但很有效。

      我使用以下异步方法创建了一个名为 MiddelWareKeyValidation 的类:

      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);
              }
      

      然后我在 Configure 方法中转到我的 Startup.cs,在其中添加一个新的中间件,如下所示:

      app.UseMiddleware<MiddelWareKeyValidation>();
      

      一个很好的资源和信用转到这篇文章:https://www.mithunvp.com/write-custom-asp-net-core-middleware-web-api/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-08-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-23
        • 2019-02-19
        • 2019-01-24
        相关资源
        最近更新 更多