Core3.1 IdentityServer4 WebAPI не может найти / прочитать access_token?

Итак, я пытался настроить IdentityServer4, использовал несколько руководств от PluralSight и общедоступные руководства.

Я могу заставить все работать на Core2.1, но как только я попытаюсь создать IdentityServer4 на Core3.1 (со всеми последними выпусками фреймворков и ТОЧНО той же конфигурацией, что и в примере Core2.1), мой webAPI не сможет авторизуйте клиентское приложение, даже если токен присутствует.

WebAPI - это проект .NET4.x, использующий пакет IdentityServer3.Contrib.AccessTokenValidation.

Конфигурация запуска IDP (такая же для проектов Core2.1 и Core3.1):

services
   .AddIdentityServer()
   .AddDeveloperSigningCredential()
   .AddTestUsers(SeedData.GetUsers())
   .AddInMemoryIdentityResources(SeedData.GetIdentityResources())
   .AddInMemoryApiResources(SeedData.GetApiResources())
   .AddInMemoryClients(SeedData.GetClients());

Конфигурация запуска WebAPI (IdentityServer3.Contrib.AccessTokenValidation) работает для Core2.1 IdentityServer4, но не для Core3.1 IdentityServer4

public void Configuration(IAppBuilder app) {
   app.UseIdentityServerBearerTokenAuthentication(new IdentityServer3.AccessTokenValidation.IdentityServerBearerTokenAuthenticationOptions() {
      Authority = "https://localhost:44314/",
      ClientId = "kpcwebapi",
      RequiredScopes = new[] { "kpcwebapi" },
   });
}

Конфигурация клиентского приложения работает для Core2.1 IdentityServer4, но не для Core3.1 IdentityServer4

services.AddOpenIdConnect("oidc", options => {
    options.SignInScheme = "Cookies";
    options.Authority = "https://localhost:44314/";
    options.ClientId = "testHybrid";
    options.ResponseType = "code id_token";
    options.Scope.Add("openid"); 
    options.Scope.Add("profile"); 
    options.Scope.Add("kpcwebapi");
    options.SaveTokens = true;
    options.ClientSecret = "secret";
    options.GetClaimsFromUserInfoEndpoint = true;
    options.ClaimActions.Remove("amr");
    options.ClaimActions.DeleteClaim("sid");
    options.ClaimActions.DeleteClaim("idp");
    options.TokenValidationParameters = new TokenValidationParameters {
       NameClaimType = JwtClaimTypes.GivenName,
       RoleClaimType = JwtClaimTypes.Role,
    };    
});

Я уверен, что конфигурация правильная, так как все работает отлично на Core2.1. Мой вопрос, так как я сам не могу его найти, изменилось ли что-нибудь в Core3.1 IdentityServer4, что мой WebAPI больше не работает? Я начинаю думать, что есть серьезная ошибка / проблема с последней версией IdentityServer4 (для Core3.1) ... поскольку мы используем OpenIDConnect ... Авторизация должна работать при обновлении вашего IdentityServer?

Забавно то, что при запуске API я получаю исключение всякий раз, когда IDP не запущен, если он запущен, он передает инструкцию без ошибок / сбоев. Итак, мой API действительно устанавливает соединение с IDP (как Core2.1, так и Core3.1), но когда это IDP Core3.1, полученные вызовы от клиентского приложения не аутентифицируются / не авторизуются.

Если кто-то знает, что я делаю не так, я был бы очень признателен, если бы поделился этим, потому что я только что потерял 2 недели времени, пытаясь заставить его работать на Core3.1 ...


person Nimesco    schedule 03.03.2020    source источник


Ответы (1)


Рассматривали ли вы для своего WebApi использование библиотеки IdentityServer4 вместо IdentityServer3?

Вы можете найти пример здесь http://docs.identityserver.io/en/stable/topics/apis.html

person Firdaus Kamaruddin    schedule 04.03.2020
comment
Да, мы учли это, но это не работает. IdentityServer4 - это библиотека .NET Core, а наш API - это проект .NET 4.x (потому что он использует наш EntityFramework6 DbContext) - person Nimesco; 05.03.2020