使用 Autofac 在项目中设置 AAD 身份验证
Setting up AAD Authentication in a Project with Autofac
我有一个具有 AAD 身份验证的 Web API(在代码中,因为它在 IaaS 而不是 PaaS 中运行)运行良好,但如果我将 Autofac 配置添加到 Startup.cs,身份验证就会中断,(如果我在 Auth inizialization Autofac 中断之后放置 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);
}
一起使用这两个工具的最佳做法是什么?
我没有正确设置所有 WebAPI autofac 引用以获取我遵循的所有依赖项 this 快速启动然后添加我的引用。下面是新的 ConfigureAutofac 函数(configure auth 保持不变)
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);
}
我有一个具有 AAD 身份验证的 Web API(在代码中,因为它在 IaaS 而不是 PaaS 中运行)运行良好,但如果我将 Autofac 配置添加到 Startup.cs,身份验证就会中断,(如果我在 Auth inizialization Autofac 中断之后放置 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);
}
一起使用这两个工具的最佳做法是什么?
我没有正确设置所有 WebAPI autofac 引用以获取我遵循的所有依赖项 this 快速启动然后添加我的引用。下面是新的 ConfigureAutofac 函数(configure auth 保持不变)
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);
}