首页 > 解决方案 > 将 JWT 承载授权添加到 NSwag 13

问题描述

我们正在使用 NSwag 11 并试图移动到似乎使用完全不同的调用的 13th。

旧式代码看起来有点

public static class SwaggerServiceExtensions
{
    public static IServiceCollection AddSwaggerDocumentation(this IServiceCollection services)
    {
        services.AddSwaggerGen(c =>
        {
            c.SwaggerDoc("v1.0", new Info { Title = "Main API v1.0", Version = "v1.0" });

            c.AddSecurityDefinition("Bearer", new ApiKeyScheme
            {
                Description = "JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"",
                Name = "Authorization",
                In = "header",
                Type = "apiKey"
            });
        });

        return services;
    }

    public static IApplicationBuilder UseSwaggerDocumentation(this IApplicationBuilder app)
    {
        app.UseSwagger();
        app.UseSwaggerUI(c =>
        {
            c.SwaggerEndpoint("/swagger/v1.0/swagger.json", "Versioned API v1.0");

            c.DocExpansion("none");
        });

        return app;
    }
}

现在感觉图书馆发生了很大的变化。所以现在我将使用services.AddSwaggerDocumentapp.UseSwaggerUi3。而且没有像SwaggerSecuritySchemeApiKeyScheme这样的选项

标签: c#.net-coreswaggernswag

解决方案


您是否尝试过以下操作?

services.AddOpenApiDocument(document => 
{
    document.DocumentName = "v1";
    document.PostProcess = d =>
    {
        d.Info.Version = "v1";
        d.Info.Title = "Main API v1.0";
    };

    document.AddSecurity("apikey", Enumerable.Empty<string>(), new OpenApiSecurityScheme
    {
        Description = "JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"",
        Type = OpenApiSecuritySchemeType.ApiKey,
        Name = "Authorization",
        In = OpenApiSecurityApiKeyLocation.Header
    });

    document.OperationProcessors.Add(
        new OperationSecurityScopeProcessor("bearer"));
});

app.UseSwaggerUi3(typeof(Startup).GetTypeInfo().Assembly, settings =>
{
        settings.DocumentPath = "/swagger/" + "v1" + "/swagger.json";
        settings.DocExpansion = "none";
});

推荐阅读