Авторизация токена в swagger в ASP.NET - PullRequest
2 голосов
/ 10 марта 2020

Я документирую API моего приложения через Swagger, который работает с проверкой через токен сеанса, то есть, через имя пользователя и пароль в течение определенного времени генерируется токен, который позволяет пользователю перемещаться по сайту. Мне нужно, чтобы swagger автоматически захватывал этот токен сеанса и помещал его в заголовок запросов для остальных методов API. Единственное, чего я мог достичь, это передать токен как параметр, но сделать это вручную , Идея состоит в том, чтобы сделать его автоматизированным c. Я оставляю конфигурацию SwaggerConfig.cs, которую я несу на данный момент.

public class SwaggerConfig
{

    public static void Register()
    {

        var thisAssembly = typeof(SwaggerConfig).Assembly;
        GlobalConfiguration.Configuration
            // HABILITAMOS SWAGGER.
            .EnableSwagger(c =>
                {
                    var baseDirectory = AppDomain.CurrentDomain.BaseDirectory + @"\bin\";
                    var commentsFileName = Assembly.GetExecutingAssembly().GetName().Name + ".xml";
                    var commentsFile = Path.Combine(baseDirectory, commentsFileName);
                    c.SingleApiVersion("v1", "API");
                    c.OperationFilter<AddRequiredHeaderParameter>();
                    c.PrettyPrint();
                    c.ApiKey("apikey")
                        .Description("API Key Authentication")
                        .Name("Bearer")
                        .In("header");
                    c.IgnoreObsoleteActions();
                    c.IgnoreObsoleteProperties();
                    c.DescribeAllEnumsAsStrings();
             .EnableSwaggerUi(c =>
                {   c.DocumentTitle("Documentación API");
                      c.EnableApiKeySupport("apikey", "header");
                });
    }
}

В свою очередь, добавьте класс для проверки приложения, из которого оно сделано по запросу

public class AddRequiredHeaderParameter : IOperationFilter
{
    public void Apply(Swashbuckle.Swagger.Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription)
    {
        if (operation.parameters == null)
            operation.parameters = new List<Parameter>();

        operation.parameters.Add(new Parameter
        {
            name = "AuthorizedClient",
            @in = "header",
            type = "intenger",
            description = "Aplicacion",
            required = true,
            @default = axaxax
        });

        operation.parameters.Add(new Parameter
        {
            name = "ClientKey",
            @in = "header",
            type = "string",
            description = "Cliente",
            required = true,
            @default = "bxbxbx"
        });

        operation.parameters.Add(new Parameter
        {
            name = "Authorization",
            @in = "header",
            type = "apikey",
            description = "Token de sesión",
        });
    }
}
...