0

我正在尝试使用 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。

4

1 回答 1

2

直接来自Identity server 4的文档

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

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

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

于 2018-05-14T12:21:16.943 回答