http basic auth с документацией API swashbuckle

может ли кто-нибудь знать, как я могу интегрировать базовую аутентификацию с документацией swashbuckle api?

Я видел, что в файле swaggerconfig есть функция basicAuth:

    c.BasicAuth("basic").Description("Basic HTTP Authentication");

что я сделал:

  • раскомментировал предыдущую строку, но ничего не изменилось!

кто-нибудь знает, что я пропустил?

спасибо!

2 ответов


вот как я сделал аутентификацию httpbasic:

public class AddAuthorizationHeaderParameterOperationFilter: IOperationFilter
{
    public void Apply(Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription)
    {
        var filterPipeline = apiDescription.ActionDescriptor.GetFilterPipeline();
        var isAuthorized = filterPipeline
                                         .Select(filterInfo => filterInfo.Instance)
                                         .Any(filter => filter is IAuthorizationFilter);

        var allowAnonymous = apiDescription.ActionDescriptor.GetCustomAttributes<AllowAnonymousAttribute>().Any();

        if (isAuthorized && !allowAnonymous)
        {
            operation.parameters.Add(new Parameter {
                name = "Authorization",
                @in = "header",
                description = "access token",
                required = true,
                type = "string"                    
            });
        }
    }
}

пользователь api должен записать в поле Значение: basic [un: pw].tobase64.

ссылки: выпуск swashbuckle 326 swashbuckle выпуск 2


незначительное улучшение самого отличного ответа @MarwaAhmad-это проверка нулевых параметров (например, простой GET или call со всеми параметрами в URL-адресе) . Также добавлены детали для Basic Auth.

кроме того, если вы уже используете глобальный IAuthorizationFilter для, скажем, применения HTTPS, то вы захотите изменить более общий

filter => filter is IAuthorizationFilter

конкретной

filter => filter is AuthorizeAttribute
    public class AddAuthorizationHeaderParameterOperationFilter : IOperationFilter
    {
        public void Apply(Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription)
        {
            var filterPipeline = apiDescription.ActionDescriptor.GetFilterPipeline();
            var isAuthorized = filterPipeline.Select(filterInfo => filterInfo.Instance)
                .Any(filter => filter is IAuthorizationFilter);

            var allowAnonymous =
                apiDescription.ActionDescriptor.GetCustomAttributes<AllowAnonymousAttribute>().Any();

            if (isAuthorized && !allowAnonymous)
            {
                if (operation.parameters == null)
                    operation.parameters = new List<Parameter>();

                operation.parameters?.Add(new Parameter
                {
                    name = "Authorization",
                    @in = "header",
                    description = "Basic HTTP Base64 encoded Header Authorization",
                    required = true,
                    type = "string"
                });
            }
        }
    }