属性到安全 Web Api

Attribute To Secure Web Api

我正在使用一个网络 api,它应该有一个请求密钥,根据它,api 控制器将执行 具体任务。我在 vs code 中使用 rest 客户端程序并做了以下测试:

GET http://localhost:PortNo/WeatherForecast/GetAllTeams
test: "12345678910" //Key

所以在控制器中,我这样做是为了获取键值:

[HttpGet]
public async Task<ActionResult<IEnumerable<TeamDetails>>> GetAllTeams()
{
    string Token = Request.Headers["test"]; //Getting the key value here
    var teams = _service.GetAllTeams();

    return Ok(teams)
}

但是我脑子里想的东西很少,并且正在做研发,比如我怎样才能用一个属性来制作上面的东西。说每个控制器 将具有如下属性,如果未找到合适的键,则使请求无效:

[InvalidToken] //This is the attribute
[HttpGet]
public async Task<ActionResult<IEnumerable<TeamDetails>>> GetAllTeams()
{
   var teams = _service.GetAllTeams();

   return Ok(teams)
}

我不确定这是否会使 api 安全并且我的计划是使每个 http 请求有效(在我的例子中,目前是一个简单的表单提交),所以它应该说请求是从网络生成的 api app.

N.B:我之前在小部分使用 web api,但现在要实施的内容更广泛,所以希望能得到一些可以帮助我的建议指导更好的设计。

试一试:

using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
using System;

..

public class InvalidToken : Attribute, IActionFilter
    {
        
        public InvalidToken( )
        { 
           
        }

        public void OnActionExecuting(ActionExecutingContext context)
        {
            var Authorization = context.HttpContext.Request.Headers["test"];
             
            if ( Authorization != "12345678910")
            {
                context.ModelState.AddModelError("Authorization", "Authorization failed!");
                return;
            }
            
             
        }

        public void OnActionExecuted(ActionExecutedContext context)
        {
            //   "OnActionExecuted" 
            
        }

         
    }

Startup.cs

     services.AddScoped<InvalidToken>();
// add filter to whole api
     services.AddControllers(options =>
                {
                    options.Filters.Add<InvalidToken>();
                });