Настройте IdentityServer4 с собственным WebApi OWIN.

Я пытаюсь создать службу идентификации с помощью IdentityServer4. Служба размещается самостоятельно с помощью OWIN (.Net Fx 4.7.x). Вот что я пробовал до сих пор.

Попытка №1: используйте примеры из документации: Однако все примеры основаны на ядре .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 больше не поддерживается.


person Sayan Pal    schedule 14.05.2018    source источник
comment
Вы не можете, сервер идентификации 4 предназначен только для ядра dotnet. Вы можете создать отдельный проект в качестве ядра dotnet, используя net framework или нет по вашему выбору, тогда это будет вашей конечной точкой для всех ваших приложений для аутентификации. В противном случае вам придется использовать сервер идентификации 3.   -  person penleychan    schedule 14.05.2018
comment
Ваш вопрос немного не ясен. Вы пытаетесь создать сервер идентификации, используя сервер идентификации 4 для .net 4.7? Или вы пытаетесь подключиться к серверу идентификации с помощью .net 4.7?   -  person DaImTo    schedule 14.05.2018
comment
@DaImTo Извините за путаницу. Обновил вопрос. Я пытаюсь создать службу идентификации.   -  person Sayan Pal    schedule 14.05.2018


Ответы (1)


Непосредственно из документации для сервера идентификации 4.

IdentityServer4 — это платформа OpenID Connect и OAuth 2.0 для ASP.NET Core 2.

Сервер идентификации 4 работает только с ядром Asp.Net 2.0. Вы не сможете использовать это для создания сервера идентификации со старым ASP.Net (Owin/KATANA). Я рекомендую вам перейти на ASP.NET Core 2.0.

Как упоминалось в комментариях, вы можете вернуться к Identity Server 3, но это больше не поддерживается, поэтому, вероятно, не должно быть никаких обновлений безопасности, если с ним возникнут какие-либо проблемы. Из-за этого я бы лично не стал использовать его в новом производственном продукте.

person DaImTo    schedule 14.05.2018