Пользовательский интерфейс Swashbuckle Swagger не отправляет client_secret и client_id в конечную точку OAuth при использовании формы аутентификации

#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 «…