【问题标题】:Swagger returns Unauthorized only through SwaggerSwagger 仅通过 Swagger 返回 Unauthorized
【发布时间】:2020-10-23 11:33:49
【问题描述】:

我想添加直接通过 Swagger 添加标题的可能性,但仅限于某些操作,我发现简单地添加标题参数是最简单的解决方案。

为了我的授权,我正在使用 JWT 令牌并注意一切都在我的浏览器和邮递员中运行

这是我的行动

[授权(Policy = "RequireAuth")] [HttpGet("get")] public IActionResult GetAction([FromHeader(Name="Authorization")][Required] string requiredHeader) { 返回确定(必需标头); }

但是当我添加 - Bearer ACTUALJWTTOKEN - 它仍然未经授权返回。

我是不是误解了向 Swagger 添加标头参数的用法,这不应该有效吗?

【问题讨论】:

    标签: c# swagger


    【解决方案1】:

    你可以配置 swagger 来使用 Auth

    在您的 Startup 课程中 将此代码放在 ConfigureServices 方法中

                services.AddSwaggerGen(c => {
                    c.SchemaGeneratorOptions.DescribeAllEnumsAsStrings = true;
                    c.SchemaGeneratorOptions.DescribeStringEnumsInCamelCase = true;
                    c.SwaggerDoc("v1", new OpenApiInfo {Title = "My API", Version = "v1"});
                    c.AddSecurityDefinition("Bearer",
                        new OpenApiSecurityScheme {
                            In = ParameterLocation.Header,
                            Description =
                                "Please enter into field the word 'Bearer' following by space and JWT",
                            Name = "authorization",
                            Type = SecuritySchemeType.ApiKey
                        });
                    c.AddSecurityRequirement(new OpenApiSecurityRequirement() {
                        {
                            new OpenApiSecurityScheme {
                                Reference =
                                    new OpenApiReference {
                                        Type = ReferenceType.SecurityScheme, Id = "Bearer"
                                    },
                                Scheme = "oauth2",
                                Name = "Bearer",
                                In = ParameterLocation.Header,
                            },
                            new List<string>()
                        }
                    });
                    c.SchemaFilter<EnumSchemaFilter>();
                });
    
    

    【讨论】:

    • 但据我了解,每个通话都会包含标题?我不想向我的注册操作和其他几个操作抛出授权标头
    • 您可以为他们使用 [AllowAnonymous] 属性
    • 我完全忘记了那个。谢谢,我明天试试
    猜你喜欢
    • 2020-10-18
    • 2022-11-15
    • 2020-02-13
    • 1970-01-01
    • 1970-01-01
    • 2016-11-06
    • 2018-06-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多