我正在尝试使用 IdentityServer4 创建身份服务。该服务使用 OWIN (.Net Fx 4.7.x) 自托管。这是我到目前为止所尝试的。
尝试#1:使用文档中的示例:但是,所有示例均基于 .Net 核心。复制诸如代码之类的代码app.UseIdentityServer();
不起作用,因为在示例中app
是 type IApplicationBuilder
,而在 OWIN 自托管应用程序中,我们有IAppBuilder
.
// Startup.cs
public void Configuration(IAppBuilder app)
{
// Configure Web API for self-host.
HttpConfiguration config = new HttpConfiguration();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
// Configure Unity IOC
app.UseIdentityServer(); //<--doesn't compile
app.UseWebApi(config);
}
尝试#2:手动注册 IdentityServer 中间件:我尝试通过查看源代码手动注册所需的中间件。这看起来像下面这样:
//Startup.cs
public void Configuration(IAppBuilder app)
{
...
// Configure Unity IOC
app.Use<IdentityServerMiddleware>(
config.DependencyResolver.GetService(typeof(ILogger<IdentityServerMiddleware>)));
app.UseWebApi(config);
}
这也不起作用,因为该Main
方法在盯着 WebApp 时会引发以下错误WebApp.Start<Startup>(baseAddress);
System.Web.Http.Owin.HttpMessageHandlerAdapter 和 Microsoft.AspNetCore.Http.RequestDelegate 之间没有可用的转换。参数名称:签名
如何正确配置它?我知道在这种情况下我可以使用 IdentityServer3,但我热衷于使用 IdentityServer4,因为不再维护 IdentityServer3。