Core3.1 IdentityServer4 WebAPI не может найти / прочитать access_token? - PullRequest
0 голосов
/ 03 марта 2020

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

Я могу заставить все работать на 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), но когда это Core3.1 IDP, принятые вызовы от клиентского приложения не проходят проверку подлинности / авторизацию.

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

1 Ответ

0 голосов
/ 04 марта 2020

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...