【发布时间】:2015-01-01 23:38:34
【问题描述】:
我有一个自托管的 asp.net web api。我有几个工作正常的 api 控制器。所有请求都到达 api 方法,响应到达客户端。 现在我尝试为 web-api 添加授权。
我通过添加 AUTH SECTION 更改了我的启动配置。
static void Main(string[] args)
{
StartOptions startOptions = new StartOptions();
startOptions.Urls.Add("https://*:44305/");
startOptions.Urls.Add("http://*:9001/");
using (Microsoft.Owin.Hosting.WebApp.Start<dobStartUp>(startOptions))
{
//...
}
}
public class dobStartUp
{
public static OAuthAuthorizationServerOptions OAuthOptions { get; private set; }
public static string PublicClientId { get; private set; }
public void Configuration(IAppBuilder app)
{
//----AUTH SECTION---
app.CreatePerOwinContext(ApplicationDbContext.Create);
app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
// PublicClientId = "self";
// OAuthOptions = new OAuthAuthorizationServerOptions
// {
// TokenEndpointPath = new PathString("/Token"),
// Provider = new ApplicationOAuthProvider(PublicClientId),
// AuthorizeEndpointPath = new PathString("/api/Account/ExternalLogin"),
// AccessTokenExpireTimeSpan = TimeSpan.FromDays(14),
// AllowInsecureHttp = true
// };
// app.UseOAuthBearerTokens(OAuthOptions);
//-------------
var config = new HttpConfiguration();
config.SuppressDefaultHostAuthentication();
config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));
config.Services.Replace(typeof(IAssembliesResolver),new dobAssembliesResolver());
config.Formatters.Clear();
config.Formatters.Add(new JsonMediaTypeFormatter());
config.Formatters.JsonFormatter.SerializerSettings = new Newtonsoft.Json.JsonSerializerSettings();
// config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new Common.dobJsonContractResolver();
var container = new UnityContainer();
container.RegisterType<IdobRDBRepository, dobRDBRepository>(new TransientLifetimeManager());
container.RegisterType<IResourcesContentRepository, AS3ContentRepository>(new TransientLifetimeManager());
SystemDiagnosticsTraceWriter traceWriter = config.EnableSystemDiagnosticsTracing();
traceWriter.IsVerbose = false;
traceWriter.MinimumLevel = TraceLevel.Debug;
config.DependencyResolver = new UnityDependencyResolver(container);
config.MapHttpAttributeRoutes();
app.UseWebApi(config);
}
}
当我在 auth-section 中使用 app.CreatePerOwinContext 时,会调用创建 appDbContext 和 appUserManager 的方法,但我对每个 api 方法都有 404 个响应。当我不调用这些 CreatePerOwinContext 方法时,每个方法都照常工作。我知道我可以使用我的 IoC 容器来制作 dbContext 和 userManager 的实例,但我想了解我当前与 app.CreatePerOwinContext 和 404 响应有关的问题。 提前谢谢大家。
【问题讨论】:
标签: asp.net oauth-2.0 owin asp.net-web-api2 self-hosting