#c# #.net #swagger #swashbuckle
#c# #.net #swagger #swashbuckle
Вопрос:
Я использую Swashbuckle версии 5.6 и .NET Framework. Но моя авторизация находится на стороне сервера (другой проект веб-API только для авторизации). Я хотел бы предоставить своим пользователям простой способ добавления токена аутентификации для каждого запроса в пользовательском интерфейсе swagger. В настоящее время я могу добавить токен или другие дополнительные заголовки с помощью расширения Chrome, подобного этому, но это, очевидно, не для пользователей. Я предпочитаю иметь все в одном инструменте без расширений Chrome. Есть ли лучший способ?
Обновить
Итак, кажется, я неправильно сформулировал свой вопрос. Я собираюсь исправить это, добавив новые детали. Во-первых, я хотел бы показать, что именно мне нужно. Пожалуйста, посмотрите на экран примера всплывающего окна авторизации swagger:
Я пытаюсь сделать для этого следующее:
- Реализовать
IOperationFilter
public class AuthorizationHeaderParameterOperationFilter : IOperationFilter
{
public void Apply(Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription)
{
if (operation.security == null)
{
operation.security = new List<IDictionary<string, IEnumerable<string>>>();
}
var test = new Dictionary<string, IEnumerable<string>>();
test.Add("test", new List<string>
{
"field1",
});
operation.security.Add(test);
}
}
- добавьте это в мою конфигурацию swagger:
public static void Register()
{
GlobalConfiguration.Configuration
.EnableSwagger(c =>
{
c.RootUrl(ResolveBasePath);
c.PrettyPrint();
c.IgnoreObsoleteActions();
c.UseFullTypeNameInSchemaIds();
c.DescribeAllEnumsAsStrings();
c.OperationFilter<AuthorizationHeaderParameterOperationFilter>();
c.ResolveConflictingActions(apiDescriptions => apiDescriptions.First());
})
.EnableSwaggerUi(c =>
{
c.DocExpansion(DocExpansion.None);
});
}
В результате я вижу изменения, но это что-то странное. Да, я вижу появившийся знак авторизации:
Но если я щелкну по нему, я увижу это пустое окно:
Я совершенно не понимаю, как настройки
var test = new Dictionary<string, IEnumerable<string>>();
test.Add("test", new List<string>
{
"field1",
});
operation.security.Add(test);
привязаны к окну. Пожалуйста, помогите.
Комментарии:
1.В пользовательском интерфейсе Swagger есть место для авторизации, см. Кнопку Авторизации в этих примерах: swagger-net-test.azurewebsites.net/swagger/ui/index offleaseonly.azurewebsites.net/swagger/ui/index
2. Вот статья: Swagger — схема безопасности для защищенных API , в которой рассказывается о том, как разрешить пользователю использовать токен на предъявителя или базовую аутентификацию в пользовательском интерфейсе Swagger. Хотя его на ASP.NET Ядро, это должно быть таким же образом в .NET framework.