Как защитить конечную точку чванства в .NET Core API? - PullRequest
4 голосов
/ 16 марта 2019

У меня есть 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.

...