如何保护.NET Web API与密码没有数据库和身份

kpbwa7wx  于 2023-03-09  发布在  .NET
关注(0)|答案(1)|浏览(103)

考虑到将来我将实现具有集成安全性的网关,我需要一种快速而简单的方法来保护.NET 6 Web服务:它的目标是作为在www.example.com索引中搜索的接口lucene.net。
我有一些特殊性:

  • Web服务位于企业公司中,不能选择Azure、AWS或Auth0等外部授权
  • 我没有任何数据库或持久层
  • 我不必管理用户列表或配置文件,如果调用服务有正确的密码或令牌应该能够使用我所有的API没有任何注册

现在我们有一个具有以下逻辑的旧应用程序:

  • 每个操作都有用户和密码参数
  • 用户和密码存储在配置文件中
  • 每次调用都使用配置文件手动检查用户和密码

我想知道是否有一个更好的方法,但同样简单?
我不想在每次调用时都发送密码,也不想在每次操作时都写一个if
谢谢

ne5o7dgx

ne5o7dgx1#

一种可能的方法是编写一个简单的中间件,检查提供的承载令牌是否与存储在appsettings.json中的令牌相同。

public class BearerAuthenticationMiddleware
{
    private readonly RequestDelegate _next;

    public BearerAuthenticationMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    public async Task InvokeAsync(HttpContext context)
    {
        
        if (!context.Request.Headers.TryGetValue("Authorization", out var
                bearerTokenRequest))
        {
            context.Response.StatusCode = 401;
            await context.Response.WriteAsync("Bearer token not found");
            return;
        }

        var appSettings = context.RequestServices.GetRequiredService<IConfiguration>();
        var bearerToken = "Bearer "+ appSettings.GetValue<string>("bearerToken");
        if (bearerToken != bearerTokenRequest)
        {
            context.Response.StatusCode = 401;
            await context.Response.WriteAsync("Invalid bearer token");
            return;
        }

        await _next(context);
    }
}


public class BearerAuthenticationPipeline
{
    public void Configure(IApplicationBuilder applicationBuilder)
    {
        applicationBuilder.UseMiddleware<BearerAuthenticationMiddleware>();
    }
}

[MiddlewareFilter(typeof(BearerAuthenticationPipeline))]

public class MyApiController : ControllerBase
{
     ....
}

相关问题