Как пропустить авторизацию для определенных путей - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть проект ASP.NET Web Api 2, в котором я использую несколько механизмов аутентификации (Windows Auth & API KEY Auth).

Мой класс запуска выглядит примерно так

public class Startup
    {
        public void Configuration(IAppBuilder app)
        {

            var httpConfiguration = new HttpConfiguration();
            app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);

            ConfigureWinAuth(app);
            ConfigureApiKeyAuth(app);    

            app.Use<AuthMiddleware>();
            app.Use<LicenseMiddleware>();

            WebApiConfig.Register(httpConfiguration);           
            app.UseWebApi(httpConfiguration);    

        }

        public void ConfigureWinAuth(IAppBuilder app)
        {
            var oAuthServerOptions = new OAuthAuthorizationServerOptions
            {
                AllowInsecureHttp = true,
                TokenEndpointPath = new PathString("/win-auth-token"),
                AccessTokenExpireTimeSpan = TimeSpan.FromDays(1),
                Provider = new WindowsAuthorizationServerProvider()
            };

            app.UseOAuthAuthorizationServer(oAuthServerOptions);
            app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());
        }

        public void ConfigureApiKeyAuth(IAppBuilder app)
        {
            app.UseApiKeyAuthentication(new ApiKeyAuthenticationOptions
            {
                Provider = new ApiKeyAuthenticationProvider
                {
                    OnValidateIdentity = ValidateIdentity,
                    OnGenerateClaims = GenerateClaims
                }
            });
        }
    }

Теперь мне также нужно добавить поддержку документов Swagger, которые я использую для этой цели Swashbuckle .

Теперь, если я обозреваю сервер / сваггера в браузере, я получаю 401, чтоожидается, так как Owin запрашивает, чтобы заголовок авторизации присутствовал во всех запросах.Теперь мне нужно сказать Оуэну, что этот заголовок не следует ожидать, когда путь равен / swagger .

Я не смогу использовать атрибут [AllowAnonymous], поскольку способ работы swashbuckle - это динамическое создание URL-адреса.служить документам.по умолчанию http://localhost/swagger

Может кто-нибудь дать мне знать, как этого добиться?

Обновление 1

Я закомментировал все аутентификации иПромежуточное программное обеспечение и до сих пор получают 401

//ConfigureWinAuth(app);
            //ConfigureApiKeyAuth(app);


            //app.Use<AuthMiddleware>();
            //app.Use<LicenseMiddleware>();

Заранее спасибо !!

...