asp.net-core - 具有 .Net Core 3.0 不记名 token 授权的 Swagger UI

标签 asp.net-core swagger asp.net-core-webapi swagger-ui .net-core-3.0

我正在尝试将授权 header 添加到 SwaggerUI api 测试中。下面是我的 Startup.cs

public void ConfigureServices(IServiceCollection services)
    {
       
        services.AddControllers();
        services.Configure<ApiBehaviorOptions>(options =>
        {
            options.SuppressModelStateInvalidFilter = true;
        });

        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_3_0);

        services.AddSwaggerGen(c =>
        {
            c.SwaggerDoc("v1", new OpenApiInfo
            {
                Version = "v1",
                Title = "API",
                Description = "QPIN API with ASP.NET Core 3.0",
                Contact = new OpenApiContact()
                {
                    Name = "Tafsir Dadeh Zarrin",
                    Url = new Uri("http://www.tdz.co.ir")
                }
            });
            var securitySchema = new OpenApiSecurityScheme
            {
                Description = "JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"",
                Name = "Authorization",
                In = ParameterLocation.Header,
                Type = SecuritySchemeType.ApiKey
            };
            c.AddSecurityDefinition("Bearer", securitySchema);
            
            var securityRequirement = new OpenApiSecurityRequirement();
            securityRequirement.Add(securitySchema, new[] { "Bearer" });
            c.AddSecurityRequirement(securityRequirement);
            
        });
    }

    
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IServiceProvider serviceProvider)
    {
        app.UseCors("Cors");


        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseHsts();
        }

        app.UseHttpsRedirection();
        app.UseMiddleware<ApiResponseMiddleware>();
        app.UseSwagger();
        app.UseSwaggerUI(c =>
        {
            c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
        });
        app.UseRouting();

        app.UseAuthentication();
        app.UseAuthorization();


        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllers();
        });

    }

授权按钮已添加到 Swagger UI,并且我已输入所需的访问 token ,如下所示

authorize swaggerUI

但问题是,当我想尝试 API 时, token 没有添加到 API 请求中,当我单击 API 上的锁定图标时,它显示没有任何可用的授权,请参见下文

enter image description here

最佳答案

您的代码中有两点:

  1. 对于OpenApiSecurityRequirement中的OpenApiSecurityRequirement,需要设置OpenApiReference
  2. 需要指定Schemebearer

这是一个工作演示:

services.AddSwaggerGen(c =>
{
    c.SwaggerDoc("v1", new OpenApiInfo
    {
        Version = "v1",
        Title = "API",
        Description = "QPIN API with ASP.NET Core 3.0",
        Contact = new OpenApiContact()
        {
            Name = "Tafsir Dadeh Zarrin",
            Url = new Uri("http://www.tdz.co.ir")
        }
    });
    var securitySchema = new OpenApiSecurityScheme
    {
        Description = "JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"",
        Name = "Authorization",
        In = ParameterLocation.Header,
        Type = SecuritySchemeType.Http,
        Scheme = "bearer",
        Reference = new OpenApiReference
        {
            Type = ReferenceType.SecurityScheme,
            Id = "Bearer"
        }
    };
    c.AddSecurityDefinition("Bearer", securitySchema);

    var securityRequirement = new OpenApiSecurityRequirement();
    securityRequirement.Add(securitySchema, new[] { "Bearer" });
    c.AddSecurityRequirement(securityRequirement);
});

关于asp.net-core - 具有 .Net Core 3.0 不记名 token 授权的 Swagger UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58197244/

相关文章:

c# - 有谁知道 EF Core 3.0 中的 IPluralizer、ICandidateNamingService 和 CandidateNamingService 发生了什么?

asp.net-core - OmniSharp.Dnx.DnxPaths 指定的运行时路径 'default' 不存在

Goswagger 没有创建适当的 json 规范文件

asp.net - 自定义模型绑定(bind)器未针对 ASP.NET Core 2 中的单个属性触发

asp.net-core-mvc - 如何在两个.Net core MVC和Web API项目中使用一个数据库?

c# - 如何在 MultipartFormData 中传递字典?

c# - 将 Azure 仪表板集成到自定义 Web 应用程序中

asp.net-mvc - mvc 操作方法中泛型类型参数的 dot net core 自定义模型绑定(bind)

node.js - 未找到 NodeJs Swagger Typescript Controller

c# - 能否将 Swashbuckle 配置为包括不是参数或操作结果的 DTO?