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.
незначительное улучшение самого отличного ответа @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"
});
}
}
}