Недавно я начал проект Web API 2 в Visual Studio 2012 с использованием промежуточного программного обеспечения OWIN для аутентификации пользователей с помощью OAuth2. Я включил аутентификацию на основе токенов, как описано в разделе this tutorial (Token Based Authentication). Часть аутентификации отлично работает. Я добавил некоторые методы тестирования API, и я хотел подключить Swagger для документации по API. Я тоже заработал эту часть, за исключением того, что API-вызовы от Swagger терпят неудачу при авторизации.Как настроить Swagger в Web API 2 на запрос аутентификации POST OAuth2?
После исследования я нашел Erik Dahl's post о том, как подключить Swagger к промежуточному программному обеспечению OWIN. После того, как я настроил свой Swagger в соответствии с постами, теперь я вижу кнопки аутентификации в пользовательском интерфейсе Swagger рядом с каждым методом API. Однако при попытке аутентификации аутентификация внутри Swagger выполняется с использованием запроса GET. Аутентификация в веб-API, хотя требует, чтобы это был запрос POST. Возможно ли настроить Swagger для запроса аутентификации POST? Если нет, должен ли я разрешить моему API принимать запросы GET для аутентификации маркера? Какой был бы лучший подход для выполнения этой работы?
Примечание: запрос по-прежнему удаляет мою логику аутентификации, но client_id и client_secret не передаются в запросе GET только в запросе POST.
Вот мой Кураж конфигурации:
httpConfig
.EnableSwagger(c =>
{
c.SingleApiVersion("v1", "Sample API");
c.ApiKey("token")
.Description("API Key Authentication")
.Name("Bearer")
.In("header");
c.OAuth2("oauth2")
.AuthorizationUrl("/oauth/token")
.Flow("implicit")
.Description("OAuth2 authentication")
.Scopes(scopes =>
{
scopes.Add("sampleapi", "Sample API");
});
c.OperationFilter<AssignOAuth2SecurityRequirements>();
})
.EnableSwaggerUi(c =>
{
c.EnableOAuth2Support(
clientId: "Sample_App",
clientSecret: "xxxxx",
realm: "test-realm",
appName: "Swagger UI");
});
А вот мой OAuth конфигурации:
app.CreatePerOwinContext<ApiClientRepo>(ApiClientRepo.Create);
app.CreatePerOwinContext<MeetingRegistrantRepo>(MeetingRegistrantRepo.Create);
OAuthAuthorizationServerOptions OAuthServerOptions = new OAuthAuthorizationServerOptions()
{
//For Dev enviroment only (on production should be AllowInsecureHttp = false)
AllowInsecureHttp = true,
TokenEndpointPath = new PathString("/oauth/token"),
AccessTokenExpireTimeSpan = TimeSpan.FromDays(1),
Provider = new CustomOAuthProvider(),
AccessTokenFormat = new CustomJwtFormat("http://localhost:51071"),
RefreshTokenProvider = new SimpleRefreshTokenProvider()
};
// OAuth 2.0 Bearer Access Token Generation
app.UseOAuthAuthorizationServer(OAuthServerOptions);
Андрей, хотя статья в вашем ответе дает возможное обходное решение для моей цели, я не чувствую, что хочу добавить весь этот багаж в проект. Это небольшой проект, и я решил, что нет простого решения для изменения конфигурации Swagger, я просто использую страницы справки веб-API. Они предоставляют достаточную информацию для моей документации по API. Я считаю, что я выберу этот маршрут. И да, я согласен с вами, я бы не изменил метод auth из POST для GET. – Sebbo