从Swagger UI中以Bearer Token的形式在头部传递Jwt Token无法工作。

6
我正在生成JWT Token Web API Core应用程序。在应用程序中,我使用Swagger并应用了Bearer Token身份验证。但是,当我尝试从Swagger UI传递Bearer Token时,我收到了401错误。请有人帮助我解决这个问题。
 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,               
            });

        });


app.UseSwagger();
        app.UseSwaggerUI(c =>
        {
            c.SwaggerEndpoint("/swagger/v1/swagger.json", "Versioned API v1.0");
            c.SwaggerEndpoint("/swagger/v2/swagger.json", "Versioned API v2.0");

            c.DocExpansion(DocExpansion.None);
        });

在此输入图像描述 [在此输入图像描述2 [在此输入图像描述]3

1个回答

9
您已经指定了API支持的SecurityScheme,但没有指定其是否必需。因此,Swagger不会将其传递到标头中。为此,您需要使用OpenApiSecurityRequirement,并在其中指定您使用的SecurityDefinition的ID。

以下是我使用的代码片段。
var securityScheme = new OpenApiSecurityScheme()
{
    Description = "JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"",
    Name = "Authorization",
    In = ParameterLocation.Header,
    Type = SecuritySchemeType.Http,
    Scheme = "bearer",
    BearerFormat = "JWT" // Optional
};

var securityRequirement = new OpenApiSecurityRequirement
{
    {
        new OpenApiSecurityScheme
        {
            Reference = new OpenApiReference
            {
                Type = ReferenceType.SecurityScheme,
                Id = "bearerAuth"
            }
        },
        new string[] {}
    }
};

options.AddSecurityDefinition("bearerAuth", securityScheme);
options.AddSecurityRequirement(securityRequirement);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接