Я пытаюсь создать службу идентификации с помощью IdentityServer4. Служба размещается самостоятельно с помощью OWIN (.Net Fx 4.7.x). Вот что я пробовал до сих пор.
Попытка №1: используйте примеры из документации: strong> Однако все примеры основаны на ядре .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);
Недоступно преобразование между System.Web.Http.Owin.HttpMessageHandlerAdapter и Microsoft.AspNetCore.Http.RequestDelegate. Имя параметра: подпись
Как я могу правильно настроить это? Я знаю, что в этом случае я могу использовать IdentityServer3, но я заинтересован в использовании IdentityServer4, поскольку IdentityServer3 больше не поддерживается.