如何使用Swashbuckle.AspNetCore v5.0.0-rc2记录API密钥身份验证

时间:2019-09-15 11:11:33

标签: asp.net-core swagger swashbuckle

我正在将具有使用Swashbuckle生成的Swagger文档的Web API从.NET Framework迁移到ASP.NET Core。在新的AspNetCore版本中,我使用的是Swashbuckle.AspNetCore v5.0.0-rc2。

这是一项内部服务,身份验证使用自定义HTTP标头中提供的API密钥。在.NET Framework应用程序中,我配置了Swashbuckle以启用我的API密钥,如下所示:

c.ApiKey("apiKey")
   .Description("My description")
   .Name("MyHttpHeaderName")
   .In("header);

c.EnableApiKeySupport("MyHtpHeaderName", "header);

如何使用Swashbuckle.AspNetCore v5.0.0-rc2启用对同一API密钥的支持?

我通过搜索发现的许多信息似乎与v5.0.0-rc2之前的Swashbuckle.AspNetCode版本有关。

此答案适用于v5.0.0-rc2,但仅涉及承载授权,似乎与使用自定义HTTP标头无关:https://stackoverflow.com/a/57872872/13087

1 个答案:

答案 0 :(得分:3)

Swashbuckle.AspNetCore中,授权设置全部由AddSecurityDefinition方法处理。

在4.x中,您可以设置一个ApiKeyScheme来描述如何使用API​​密钥来授权请求​​:

c.AddSecurityDefinition("ApiKey", new ApiKeyScheme()
{
    Description = "My description",
    Name = "MyHttpHeaderName",
    In = "header",
});

从5.x开始,Swashbuckle.AspNetCore不再使用自己的模型,而是依靠OpenAPI.NET。这意味着上面的安全性定义在5.x中看起来像这样:

c.AddSecurityDefinition("ApiKey", new OpenApiSecurityScheme()
{
    Type = SecuritySchemeType.ApiKey,
    In = ParameterLocation.Header,
    Name = "MyHttpHeaderName",
    Description = "My description",
});

请注意,您还必须设置安全要求来配置哪些操作需要哪种安全定义。在5.x中,其语法如下所示:

c.AddSecurityRequirement(new OpenApiSecurityRequirement
{
    {
        new OpenApiSecurityScheme
        {
            Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "ApiKey" }
        },
        new string[] { }
    }
});

您可以在documentation on security definitions and requirements中详细了解所有这些内容。