恐怖故事:
如果在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
但是当我更改规格时:
向服务器发出了一个swagger.json
文件的新请求(摆动的端点)。
问题是此请求没有auhorization
标头。请求摇摇欲坠的端点时,如何添加此标头?
我正在尝试遵循official documentation来基于经过身份验证的用户过滤结果。 (对未经授权的用户显示空结果。)
像这样:
app.UseSwagger(c =>
{
c.PreSerializeFilters.Add((swaggerDoc, httpReq) =>
{
var isLoggedIn = httpReq.HttpContext.User.FindFirst(ClaimTypes.NameIdentifier);
});
});
但是声明丢失了,因为缺少authorization
标头。