Итак, я пытался настроить 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 ...