属性到安全 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>();
});
我正在使用一个网络 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>();
});