Ответ 1
Я получил свое решение. Это мощно, просто не на 100% прямо настроить.
Вот шаги, которые я сделал:
Установите пакет NuGet, я использовал PM> Install-Package Swashbuckle -Version 4.1.0
, но ссылка находится в https://www.nuget.org/packages/Swashbuckle/, и я бы рекомендовал получить последнюю версию, но я знать 4.1.0. EDIT Я просто обновился до 5.X, и он сломал его. 4.1.0 работает, но последний этого не делал. Я еще не исследовал, почему еще.
Как только вы установите это, вы почти закончите.
Установка создаст файл SwaggerConfig.cs. Это код, который я использовал (скопирован из мастера github)
public class SwaggerConfig
{
public static void Register()
{
Swashbuckle.Bootstrapper.Init(GlobalConfiguration.Configuration);
SwaggerSpecConfig.Customize(c =>
{
c.IgnoreObsoleteActions();
//c.SupportMultipleApiVersions(
// new[] { "1.0", "2.0" },
// ResolveVersionSupportByRouteConstraint);
//c.PolymorphicType<Animal>(ac => ac
// .DiscriminateBy(a => a.Type)
// .SubType<Kitten>());
c.OperationFilter<AddStandardResponseCodes>();
c.OperationFilter<AddAuthResponseCodes>();
c.OperationFilter<AddOAuth2Scopes>();
//c.IncludeXmlComments(GetXmlCommentsPath());
c.ApiInfo(new Info
{
Title = "Swashbuckle Dummy",
Description = "For testing and experimenting with Swashbuckle features",
Contact = "[email protected]"
});
c.Authorization("oauth2", new Authorization
{
Type = "oauth2",
Scopes = new List<Scope>
{
new Scope { ScopeId = "test1", Description = "test1" },
new Scope { ScopeId = "test2", Description = "test2" }
},
GrantTypes = new GrantTypes
{
ImplicitGrant = new ImplicitGrant
{
LoginEndpoint = new LoginEndpoint
{
Url = "https://your.Oauth.server/Authorize"
},
TokenName = "access_token"
}
}
});
});
SwaggerUiConfig.Customize(c =>
{
var thisAssembly = typeof(SwaggerConfig).Assembly;
c.SupportHeaderParams = true;
c.DocExpansion = DocExpansion.List;
c.SupportedSubmitMethods = new[] { HttpMethod.Get, HttpMethod.Post, HttpMethod.Put, HttpMethod.Head };
//c.InjectJavaScript(typeof(SwaggerConfig).Assembly, "WebApplication4.SwaggerExtensions.onComplete.js");
//c.EnableDiscoveryUrlSelector();
//c.InjectJavaScript(thisAssembly, "Swashbuckle.Dummy.SwaggerExtensions.testScript1.js");
//c.InjectStylesheet(thisAssembly, "Swashbuckle.Dummy.SwaggerExtensions.testStyles1.css");
c.EnableOAuth2Support("client_id", "realm", "Swagger UI");
});
// NOTE: If you want to customize the generated swagger or UI, use SwaggerSpecConfig and/or SwaggerUiConfig here ...
}
private static string GetXmlCommentsPath()
{
return String.Format(@"{0}\XmlComments.xml", AppDomain.CurrentDomain.BaseDirectory);
}
Теперь мы сказали Swagger, что хотим использовать OAuth, и именно так мы хотим его использовать. Совершено, верно? Нет.
Вам нужно добавить эту папку и файлы в ваше решение: https://github.com/domaindrivendev/Swashbuckle/tree/master/Swashbuckle.Dummy.Core/SwaggerExtensions
(вам нужны только файлы .cs)
Убедитесь, что ваши пространства имен правы...
Затем вам нужно украсить свой класс в WebAPI, например:
[ScopeAuthorize("test1")]
Теперь, когда вы запустите его и перейдите на страницу разворота, вы увидите, что каждая операция, в которой есть это объявление, будет иметь переключатель OAuth в верхнем правом углу. Когда вы нажимаете на нее, вы можете использовать Неявный поток грантов и получить токен, который будет добавлен к вашему запросу.
Это будет работать только с неявным грантом от того, что я нашел. Кажется, они пытались получить AuthorizationCode Grant, но файлы js, которые они построили, поддерживают только неявные из того, что я вижу.
Надеюсь, это поможет кому-то. Это мощный инструмент, и я надеюсь, что мы увидим, что другие сайты используют что-то вроде этого.
Спасибо и удачи!