使用 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 但这不再受支持,因此如果出现任何问题,可能不会有任何安全更新。因此,我不会亲自在新产品中使用它。
我正在尝试使用 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);
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 但这不再受支持,因此如果出现任何问题,可能不会有任何安全更新。因此,我不会亲自在新产品中使用它。