Настройка AAD-аутентификации в проекте с помощью Autofac - PullRequest
0 голосов
/ 29 апреля 2019

У меня есть веб-API с аутентификацией AAD (в коде, потому что он работает в IaaS, а не в PaaS), он работает хорошо, но если я добавлю конфигурацию Autofac в Startup.cs, аутентификация прекратится (если я поставлю Autofac после Authинициализирует Autofac), что заставляет меня думать, что конфигурации перезаписывают друг друга.

Я пытался найти любую документацию о том, как использовать их оба вместе, но я не смог найти никакой информации.Один использует HttpConfiguration, а другой использует IAppBuilder, и я не знаю, как их объединить, чтобы они работали вместе.

вот мой код аутентификации:

public void ConfigureAuth(IAppBuilder app)
{
 app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
    app.UseCookieAuthentication(new CookieAuthenticationOptions());
    app.Map("/api", inner =>
    {
        inner.UseWindowsAzureActiveDirectoryBearerAuthentication(new WindowsAzureActiveDirectoryBearerAuthenticationOptions()
        {
            Tenant = tenant,
            TokenValidationParameters = new Tokens.TokenValidationParameters
            {
                ValidAudience = Audience
            }
        });
    });
}

, а вот код Autofac

public static void Register(HttpConfiguration configuration)
{
   var builder = new ContainerBuilder();
   Bootstrapper.Configure(builder);
   var container = builder.Build();
   configuration.DependencyResolver = new AutofacWebApiDependencyResolver(container);
}

Каковы наилучшие практики для совместного использования этих двух инструментов?

1 Ответ

0 голосов
/ 18 июня 2019

Я неправильно настроил все ссылки автозапуска в WebAPI для получения всех зависимостей, которым я следовал this Быстрый запуск, а затем добавил свои ссылки.Ниже приведена новая функция ConfigureAutofac (конфигурация аутентификации осталась прежней)

private void ConfigureAutofac(IAppBuilder app)
{
    //Autofac info from https://autofaccn.readthedocs.io/en/latest/integration/webapi.html#quick-start
    var builder = new ContainerBuilder();

    // STANDARD WEB API SETUP:
    // Get your HttpConfiguration. In OWIN, you'll create one
    // rather than using GlobalConfiguration.
    var config = new HttpConfiguration();

    // Register your Web API controllers.
    builder.RegisterApiControllers(Assembly.GetExecutingAssembly()); //Register WebApi Controllers
    builder.RegisterType<AutofacManager>().As<IAutofacManager>();
    builder.RegisterSource(new AnyConcreteTypeNotAlreadyRegisteredSource());

    var container = builder.Build();
    config.DependencyResolver = new AutofacWebApiDependencyResolver(container);
    GlobalConfiguration.Configuration.DependencyResolver = new AutofacWebApiDependencyResolver((IContainer)container); //Set the WebApi DependencyResolver

    // and finally the standard Web API middleware.         
    app.UseAutofacMiddleware(container);
    app.UseAutofacWebApi(config);
    app.UseWebApi(config);
}
...