简体   繁体   中英

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

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

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

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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