。Net core 3.0的JWT身份验证和Swagger

问题描述 投票:0回答:1

我正在使用.Net core 3.0开发一些Web Api,并希望将其与SwashBuckle.Swagger集成。它工作正常,但是当我添加JWT身份验证时,它无法按我预期的那样工作。为此,我添加了以下代码:

  services.AddSwaggerGen(c =>
        {
            c.SwaggerDoc("v1", new Microsoft.OpenApi.Models.OpenApiInfo { Title = "My Web API", Version = "v1" });
            c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
            {
                Description = "JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"",
                Name = "Authorization",
                In = ParameterLocation.Header,
                Type = SecuritySchemeType.ApiKey
            });

        });

添加AddSecurityDefinition函数后,我可以看到“授权”按钮,单击该按钮时,会看到以下表单:enter image description here

然后我键入Bearer WhatEverApiKeyIsfgdgdgdg845734987fgdhgiher635kjh,完成此操作后,当我从Swagger向Web Api发送请求时,我希望在请求的标头中看到authorization: Bearer WhatEverApiKeyIsfgdgdgdg845734987fgdhgiher635kjh。但是授权未添加到请求标头中。我正在使用SwashBuckle.Swagger(5.0.0-rc3)。请注意,有许多示例可以在.net core 2.0上正常工作,但是Swashbuckle摇摇欲坠的功能在最新版本上已更改,因此我无法使用该示例。

swagger asp.net-core-webapi swashbuckle .net-core-3.0
1个回答
1
投票

经过一番研究,我终于在这里找到了答案:https://github.com/domaindrivendev/Swashbuckle.AspNetCore/issues/696在看到此页面之前,我知道由于许多示例,我应该在AddSecurityDefinition之后使用AddSecurityRequirement,但是在.Net core 3.0上更改功能参数是一个问题。顺便说一句,最终答案如下:

    services.AddSwaggerGen(c =>
    {
        c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" });
        c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme()
        { In = ParameterLocation.Header, Description = "Please insert JWT with Bearer into field", Name = "Authorization", Type = SecuritySchemeType.ApiKey });
        c.AddSecurityRequirement(new OpenApiSecurityRequirement { { new OpenApiSecurityScheme { Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "Bearer" } }, new string[] { } } });
    });
© www.soinside.com 2019 - 2024. All rights reserved.