Asp.Net Core 3x招摇过市用于身份验证的多个标头

Asp.Net Core 3x招摇过市用于身份验证的多个标头,asp.net,swagger,core,swashbuckle,api-key,Asp.net,Swagger,Core,Swashbuckle,Api Key,我正在考虑基于报头系统中的旧PAT或API密钥实现一个简单的身份验证机制。最后,我希望用户在需要身份验证的请求期间提供两个头。客户端Id及其令牌。在《邮递员》中,它看起来就像这样: operation.Security.Add( new OpenApiSecurityRequirement { { new OpenApiSecurityScheme { Name = "API

我正在考虑基于报头系统中的旧PAT或API密钥实现一个简单的身份验证机制。最后,我希望用户在需要身份验证的请求期间提供两个头。客户端Id及其令牌。在《邮递员》中,它看起来就像这样:

operation.Security.Add(
    new OpenApiSecurityRequirement
    {
        {
            new OpenApiSecurityScheme
            {
                Name = "API-Key",
                Type = SecuritySchemeType.ApiKey,
                In = ParameterLocation.Header,
                Reference = new OpenApiReference 
                {
                    Type = ReferenceType.SecurityScheme, 
                    Id = "API-Key"
                }
            },
            new string[] { }
        }
    }

operation.Security.Add(
    new OpenApiSecurityRequirement
    {
        {
            new OpenApiSecurityScheme
            {
                Name = "Client-ID",
                Type = SecuritySchemeType.ApiKey,
                In = ParameterLocation.Header,
                Reference = new OpenApiReference 
                {
                    Type = ReferenceType.SecurityScheme, 
                    Id = "Client-ID"
                }
            },
            new string[] { }
        }
    }
);

并成功地做到了这一点,主要是通过适应我在这里发现的

我的定义是这样的

c.AddSecurityDefinition("API-Key", new OpenApiSecurityScheme
{
    Description = "API Key required to access the api.",
    In = ParameterLocation.Header,
    Name = "API-Key",
    Type = SecuritySchemeType.ApiKey
});

c.AddSecurityDefinition("Client-ID", new OpenApiSecurityScheme
{
    Description = "Client ID required to access the api.",
    In = ParameterLocation.Header,
    Name = "Client-ID",
    Type = SecuritySchemeType.ApiKey
});

c.OperationFilter<ApiKeyHeaderFilter>();
结果是这样的

正确生成curl请求,如下所示

curl-X GET”https://localhost:44394/Configuration/application-key“-H”accept:text/plain“-H”API key:token“-H”客户端ID:Client ID“

重要的是,我不想通过使用[FromHeader]参数装饰每个授权端点或使用SwaggerHeader属性等来定义对客户端ID的要求,我只想通过Swagger UI访问这两个标头,以便用户能够验证其请求

最后,我的问题是。我已经决定需要两个值来验证一个请求,但这是正确的方法吗,我的意思是按照惯例等等。或者,我应该走一条基本的身份验证路线,提供
客户端ID
作为
用户名
API密钥
作为
密码
,或者有另一种方法我想考虑?

旁注:此应用程序有点太简单,不能考虑使用JWT和实现权限服务。