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