简体   繁体   English

在 swagger 中为 web api 中的特定版本添加不记名令牌选项

[英]Add Bearer token option in swagger for particular version in web api

I am using Swagger in the Web API application.我在 Web API 应用程序中使用 Swagger。 I have multiple versions of API, but I want to apply Bearer token option to version 2 only.我有多个版本的 API,但我只想将不记名令牌选项应用于版本 2。 There is no authentication for both versions.两个版本都没有身份验证。 Here is my code:这是我的代码:

services.AddSwaggerGen(c =>
{
    c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" });
    c.SwaggerDoc("v2", new OpenApiInfo { Title = "My API", Version = "v2" });

    c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
    {
        In = ParameterLocation.Header,
        Description = "JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"",
        Name = "Authorization",
        Type = SecuritySchemeType.ApiKey,         
    });
});

在此处输入图像描述 在此处输入图像描述

Another way of solving this, I assume you have a prefix for controller version v1 as prefix, then what you can do is:解决这个问题的另一种方法,我假设你有一个 controller 版本 v1 的前缀作为前缀,那么你可以做的是:

public class AuthorizationHeaderParameterOperationFilter : IOperationFilter
{
    public void Apply(OpenApiOperation operation, OperationFilterContext context)
    {
        if (operation.Parameters == null)
            operation.Parameters = new List<OpenApiParameter>();

        if (context.ApiDescription.RelativePath.StartsWith("v2"))
        {
            operation.Parameters.Add(new OpenApiParameter()
            {
                @In = ParameterLocation.Header,
                Description =
                    "JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"",
                Name = "Authorization",
            });
        }

    }
}

and use it并使用它

services.ConfigureSwaggerGen(options =>
{
    options.OperationFilter<AuthorizationHeaderParameterOperationFilter>();
});

This will only add Bearer field to v2 end points.这只会将 Bearer 字段添加到 v2 端点。

在此处输入图像描述

在此处输入图像描述

You can install NSwag.AspNetCore and add different options with different versions.您可以安装NSwag.AspNetCore并添加不同版本的不同选项。

services.AddSwaggerDocument(a =>
{
    a.DocumentName = "v1";
    a.Version = "v1";
});

services.AddSwaggerDocument(a =>
{
    a.DocumentName = "v2";
    a.Version = "v2";
    a.AddSecurity("bearer", new NSwag.OpenApiSecurityScheme
    {
        Description = "jwt",
        In = NSwag.OpenApiSecurityApiKeyLocation.Header,
        Type = NSwag.OpenApiSecuritySchemeType.ApiKey,
        Scheme = "bearer"
    });
});
app.UseOpenApi();
app.UseSwaggerUi3();

You can read more about it in Microsoft Docs .您可以在Microsoft Docs中阅读有关它的更多信息。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM