Swagger UI с Swashbuckle не отображает опцию OAuth2 - PullRequest
0 голосов
/ 22 мая 2018

У меня есть веб-API, который я защищал с помощью OAuth2, но мне трудно заставить Swagger UI показывать опцию аутентификации.В настоящее время раздел пользовательского интерфейса api_key все еще отображается, несмотря на отсутствие конфигурации для него.Вот мой SwaggerConfig

public class SwaggerConfig
{
    public static void Register()
    {
        if (ConfigUtil.SSOSupported)
        {
            var thisAssembly = typeof(SwaggerConfig).Assembly;
           // Swashbuckle.Application.OAuth2SchemeBuilder
            GlobalConfiguration.Configuration
                .EnableSwagger(c =>
                    {

                        c.Schemes(new[] { "http", "https" });

                        c.SingleApiVersion("v1", "API Adapter");
                        c.PrettyPrint();

                        c.ApiKey(string.Empty);

                        c.OAuth2("oauth2")
                            .Description("Description here")
                            .Flow("implicit")
                            .AuthorizationUrl(ConfigUtil.SSOAuthority() + "/connect/authorize")
                            .Scopes(scopes =>
                            {
                                scopes.Add("api", "api");
                            });

                        c.IgnoreObsoleteProperties();

                        c.DescribeAllEnumsAsStrings();
                    })
                .EnableSwaggerUi(c =>
                    {
                        c.EnableOAuth2Support("your-client-id", "your-client-secret-if-required", "your-realms", "your-app-name");
                    });
        }
    }
}

Этот раздел включается в исходный код страницы после загрузки:

window.swashbuckleConfig = {
    rootUrl: 'http://localhost:44390',
    discoveryPaths: arrayFrom('swagger/docs/v1'),
    booleanValues: arrayFrom('true|false'),
    validatorUrl: stringOrNullFrom(''),
    customScripts: arrayFrom(''),
    docExpansion: 'none',
    supportedSubmitMethods: arrayFrom('get|put|post|delete|options|head|patch'),
    oAuth2Enabled: ('true' == 'true'),
    oAuth2ClientId: 'your-client-id',
    oAuth2ClientSecret: 'your-client-secret-if-required',
    oAuth2Realm: 'your-realms',
    oAuth2AppName: 'your-app-name',
    oAuth2ScopeSeperator: ' ',
    oAuth2AdditionalQueryStringParams: JSON.parse('{}'),
    apiKeyName: 'api_key',
    apiKeyIn: 'query'
  };

И вызывается функция iniOAuth:

window.swaggerUi = new SwaggerUi({
    url: swashbuckleConfig.rootUrl + "/" + swashbuckleConfig.discoveryPaths[0],
    dom_id: "swagger-ui-container",
    booleanValues: swashbuckleConfig.booleanValues,
    supportedSubmitMethods: swashbuckleConfig.supportedSubmitMethods,
    onComplete: function(swaggerApi, swaggerUi){
      if (typeof initOAuth == "function" && swashbuckleConfig.oAuth2Enabled) {
        initOAuth({
          clientId: swashbuckleConfig.oAuth2ClientId,
          clientSecret: swashbuckleConfig.oAuth2ClientSecret,
          realm: swashbuckleConfig.oAuth2Realm,
          appName: swashbuckleConfig.oAuth2AppName,
          scopeSeparator: swashbuckleConfig.oAuth2ScopeSeperator,
          additionalQueryStringParams: swashbuckleConfig.oAuth2AdditionalQueryStringParams
        });

Но я простополучите текстовое поле api_key и без кнопки авторизации, как я ожидал.

Все контроллеры и действия отображаются без проблем.

Я уверен, что это что-то маленькое, но я былвозиться уже пару дней и у нас кончились идеи.

...