#swagger #auth0 #swashbuckle
#swagger #auth0 #swashbuckle
Вопрос:
У меня есть проект API .NET 5, документированный с помощью SwaggerGen, для которого я пытаюсь использовать Swashbuckle в качестве пользовательского интерфейса документации. Моим поставщиком аутентификации является Auth0, поэтому я хочу, чтобы документы генерировали токен-носитель JWT, выполнив действительный вызов OAuth2 для /oauth/token
конечной точки Auth0. Authorize
Кнопка появляется на сгенерированной странице и создает форму, которая запрашивает у пользователя client_id
и client_secret
, но когда я нажимаю Authorize
кнопку, она выдает POST
запрос, в котором отсутствует client_id
и client_secret
. В частности, он переходит к правильной конечной точке ( /oauth/token
), но не имеет параметров строки запроса и только grant_type: client_credentials
в теле сообщения. Я вижу это в инструментах разработчика Chrome. Каким-то образом пользовательский интерфейс просто полностью игнорирует значения, которые я ввел в поля client_id
client_secret
формы и .
Есть ли способ заставить запрос аутентификации использовать значения из формы? Вот соответствующая часть моей конфигурации SwaggerGen:
options.AddSecurityDefinition("OAuth2", new OpenApiSecurityScheme {
Type = SecuritySchemeType.OAuth2,
Name = "Bearer",
Description = "Authorization using the OAuth2 access token authorization flow",
Scheme = "Bearer",
In = ParameterLocation.Header,
Flows = new OpenApiOAuthFlows {
ClientCredentials = new OpenApiOAuthFlow {
TokenUrl = new Uri($"https://{_configuration["Auth0:HostedDomain"]}/oauth/token"),
AuthorizationUrl = new Uri($"https://{_configuration["Auth0:HostedDomain"]}/authorize")
}
}
});
options.AddSecurityRequirement(new OpenApiSecurityRequirement {
{
new OpenApiSecurityScheme {
Reference = new OpenApiReference {
Type = ReferenceType.SecurityScheme,
Id = "OAuth2"
}
},
new List<string>()
}
});
Комментарии:
1. удалось ли вам найти решение для этого? У меня такая же проблема…
2. Нет. В итоге я отказался от Swagger в пользу Stoplight. Stoplight не обеспечивает простой способ аутентификации в тестовом жгуте, но он выглядит намного более профессионально, чем Swagger, и, по крайней мере, не показывает пользователю неработающую форму аутентификации.
Ответ №1:
Вы уверены, что пользовательский интерфейс Swagger не отправляет их, т.Е. в заголовке авторизации?
У меня была аналогичная проблема, потому что наш сервер OpenID распознает только учетные данные клиента ( client_id
, client_secret
), отправленные в основной форме, и мы должны выбрать правильный "Client credentials location"
вариант в диалоговом окне авторизации ( Request body
):
Затем client_id
в теле запроса отправляется правильно:
Комментарии:
1. Это работает для
password
потока, но при использовании потока нет диалогового окна «Местоположение учетных данных клиентаapplication
«…