【问题标题】:Passing Jwt token in header from swagger UI as bearer token not working从 swagger UI 的标头中传递 Jwt 令牌作为不记名令牌不起作用
【发布时间】:2020-06-01 03:55:40
【问题描述】:

我正在生成 jwt 令牌 web api 核心应用程序。在应用程序中,我使用 swagger 并应用了不记名令牌身份验证。但是当我尝试从 swagger UI 传递不记名令牌时,我收到 401 错误。请任何人帮助我

 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

【问题讨论】:

    标签: c# authentication asp.net-web-api swagger bearer-token


    【解决方案1】:

    您已指定 API 支持的 SecurityScheme,但未指定它是必需的。因此,swagger 不会在标头中传递它。为此,您需要使用 OpenApiSecurityRequirement 并在其中指定您使用的 SecurityDefinition 的 ID。

    这是我用过的sn-p。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-27
      • 1970-01-01
      • 2019-09-27
      • 2022-07-09
      • 2015-08-01
      • 2014-12-03
      • 2015-08-13
      • 2017-07-09
      相关资源
      最近更新 更多