首页 > 解决方案 > 使用 .NET Core 3.0 进行 JWT 身份验证和 Swagger

问题描述

我正在使用 .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功能后,我可以看到授权按钮,当我点击它时,我看到下面的表格: 在此处输入图像描述

然后我输入Bearer WhatEverApiKeyIsfgdgdgdg845734987fgdhgiher635kjh. 完成后,当我从 Swagger 向 Web API 发送请求时,我希望authorization: Bearer WhatEverApiKeyIsfgdgdgdg845734987fgdhgiher635kjh在请求的标头中看到,但授权未添加到请求标头中。我正在使用 SwashBuckle.Swagger(5.0.0-rc3)。请注意,有许多示例在 .NET Core 2.0 上运行良好,但 Swashbuckle 招摇功能在最新版本上发生了变化,因此我无法使用这些示例。

标签: swaggerasp.net-core-webapiswashbuckle.net-core-3.0

解决方案


经过一番研究,我最终在这里找到了答案

在看到这个页面之前,我知道我应该使用AddSecurityRequirementafter,AddSecurityDefinition因为示例很多,但是在.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[] { } 
    } 
  });
});

推荐阅读