使用 OWIN 自托管 WebApi 配置 IdentityServer4

Configure IdentityServer4 with OWIN self-hosted WebApi

我正在尝试使用 IdentityServer4 创建身份服务。该服务使用 OWIN (.Net Fx 4.7.x) 自托管。这是我到目前为止尝试过的方法。

尝试#1:使用 documentation: 中的示例,但是,所有示例均基于 .Net 核心。复制 app.UseIdentityServer(); 之类的代码并不简单,因为在示例中,app 的类型为 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.Start<Startup>(baseAddress);

启动 WebApp 时抛出以下错误

No conversion available between System.Web.Http.Owin.HttpMessageHandlerAdapter and Microsoft.AspNetCore.Http.RequestDelegate. Parameter name: signature

如何正确配置它?我知道在这种情况下我可以使用 IdentityServer3,但我热衷于使用 IdentityServer4,因为不再维护 IdentityServer3。

直接来自 Identity server 4

的文档

IdentityServer4 is an OpenID Connect and OAuth 2.0 framework for ASP.NET Core 2.

身份服务器 4 仅适用于 Asp.Net 核心 2.0。您将无法使用它来创建具有旧 ASP.Net (Owin/KATANA) 的身份服务器我建议您切换到 ASP.NET Core 2.0。

如评论中所述,您可以返回 Identity Server 3 但这不再受支持,因此如果出现任何问题,可能不会有任何安全更新。因此,我不会亲自在新产品中使用它。