使用Swashbuckle加载swagger.json时添加请求(JWT令牌)标头

时间:2018-09-13 13:04:03

标签: swagger swagger-ui swashbuckle

恐怖故事:

如果在swagger-ui中对用户进行了身份验证,我如何说服Swagger UI在更改authorization(swagger端点)时发送Spec标头?

更长的故事:

我在oagger2中添加了oauth2。

    services.AddSwaggerGen(c =>
    {
        foreach (var item in list)
        {
            c.SwaggerDoc($"1.0-{item.Name}", new Info
            {
                Title = $"1.0-{item.Title}",
                Version = $"1.0-{item.Version}"
            });
        }
        c.AddSecurityRequirement(new Dictionary<string, IEnumerable<string>>
        {
                { "oauth2", new string[] { } }
        });
        c.AddSecurityDefinition("oauth2", new OAuth2Scheme
        {
            Type = "oauth2",
            Flow = "password",
            TokenUrl = this.Configuration["Domain"] + "api/authorization/token"
        });
        c.IncludeXmlComments(Directory.GetCurrentDirectory() + @"/Files/Web.xml");
    });

显示一个Authorize按钮,我可以使用用户名,密码登录。
当我调用任何API控制器方法(GET,POST,PUT,DELETE)时,authorization标头会添加到Request headers中:

accept: text/plain
Accept-Encoding: gzip, deflate, br
Accept-Language: en-GB,en;q=0.9,en-US;q=0.8,sl;q=0.7
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR...
Cache-Control: no-cache

但是当我更改规格时: screenshot 向服务器发出了一个swagger.json文件的新请求(摆动的端点)。
问题是此请求没有auhorization标头。请求摇摇欲坠的端点时,如何添加此标头?

我正在尝试遵循official documentation来基于经过身份验证的用户过滤结果。 (对未经授权的用户显示空结果。)
像这样:

app.UseSwagger(c =>
{
    c.PreSerializeFilters.Add((swaggerDoc, httpReq) =>
    {
        var isLoggedIn = httpReq.HttpContext.User.FindFirst(ClaimTypes.NameIdentifier);
    });
});

但是声明丢失了,因为缺少authorization标头。

0 个答案:

没有答案