使用Swashbuckle的Swagger UI不显示OAuth2选项

时间:2018-05-22 16:44:26

标签: oauth-2.0 swagger swashbuckle

我已经获得了一个我使用OAuth2保护的Web API,但是我很难让Swagger UI显示身份验证选项。 目前,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文本框而没有像我期待的那样授权按钮。

控制器和操作都显示无问题。

我确定它有点小,但我现在已经摆弄了几天并且已经没有想法了。

0 个答案:

没有答案