Passing Jwt token in header from swagger UI as bearer token not working

Viewed 5066

I am generating jwt token web api core application. In application i am using swagger and applied bearer token authentication.but when i am try pass bearer token from swagger UI i am getting 401 error.please anyone help me on this

 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);
        });

enter image description here [enter image description here2 [enter image description here]3

1 Answers

You have specified SecurityScheme that supported by your API, but did not specify that its required. So, swagger will not going to pass that in header.For this you need to use OpenApiSecurityRequirement and within that specify Id of SecurityDefinition that you have used.

Here is a snippet that I have used.

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);
Related