У меня есть api build в .net core 2.1.Чтобы ограничить доступ к различным конечным точкам, я использую атрибуты IdentityServer4 и [Authorize].Тем не менее, моя цель в процессе разработки - представить документацию api swagger нашим разработчикам, чтобы они могли использовать ее независимо от того, откуда они работают.Проблема, с которой я сталкиваюсь, заключается в том, как защитить файл swagger index.html, чтобы только они могли видеть подробности API.
Я создал пользовательский файл index.html в wwwroot / swagger / uiПапка и все это работает, однако, этот файл использует данные из конечной точки /swagger/v1/swagger.json
, которая не защищена.Я хотел бы знать, как я могу переопределить возвращаемое значение для этой конкретной конечной точки, чтобы я мог добавить к ней собственную аутентификацию?
РЕДАКТИРОВАТЬ:
В настоящее время я достиг вышеуказанного с помощьюследующее промежуточное ПО:
public class SwaggerInterceptor
{
private readonly RequestDelegate _next;
public SwaggerInterceptor(RequestDelegate next)
{
_next = next;
}
public async Task Invoke(HttpContext context)
{
var uri = context.Request.Path.ToString();
if (uri.StartsWith("/swagger/ui/index.html"))
{
var param = context.Request.QueryString.Value;
if (!param.Equals("?key=123"))
{
context.Response.StatusCode = 404;
context.Response.ContentType = "application/json";
await context.Response.WriteAsync("{\"result:\" \"Not Found\"}", Encoding.UTF8);
return;
}
}
await _next.Invoke(context);
}
}
public class Startup
{
//omitted code
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseMiddleware<SwaggerInterceptor>();
//omitted code
}
}
Что мне не нравится в этом подходе, так как он будет проверять каждый запрос.Есть ли лучший способ добиться этого?Вышеуказанное защищает только файл index.html, но я могу настроить его таким же образом, чтобы защитить конечную точку json.