使用OWIN自托管WebApi配置IdentityServer4

时间:2018-05-14 11:06:09

标签: c# asp.net owin identityserver4 self-host-webapi

我正在尝试使用IdentityServer4创建身份服务。该服务由OWIN(.Net Fx 4.7.x)自托管。以下是我到目前为止所尝试的内容。

尝试#1:使用documentation中的示例:但是,所有示例都基于.Net核心。复制app.UseIdentityServer();等代码不起作用,因为在示例中,app的类型为IApplicationBuilder,而在OWIN自托管应用中,我们有IAppBuilder。< / p>

// 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时会引发以下错误
  

System.Web.Http.Owin.HttpMessageHandlerAdapter和Microsoft.AspNetCore.Http.RequestDelegate之间没有可用的转换。   参数名称:签名

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

1 个答案:

答案 0 :(得分:2)

直接来自Identity server 4

的文档
  

IdentityServer4是 ASP.NET Core 2 的OpenID Connect和OAuth 2.0框架。

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

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