Я обновляю IdentityServer с 2.2 до 2.4. У меня есть два проекта: один для точки входа, а другой для сервисов. Я обновил оба проекта до 2.4 и столкнулся с проблемой:
The type 'IProfileService' is defined in an assembly that is not referenced.
Кроме того, у меня есть еще одна ошибка:
The type 'ClaimsProfileService' cannot be used as type parameter 'T' in the generic type or method 'IdentityServerBuilderExtensionsAdditional.AddProfileService(IIdentityServerBuilder)'. There is no implicit reference conversion from 'ClaimsProfileService' to 'IdentityServer4.Services.IProfileService'.
Класс ClaimsProfileService реализовал интерфейс IProfileService. Это выглядит странно, потому что, когда я понижаю версию IdentityServer до версии 2.2, он работает нормально.
На самом деле, присутствует странное поведение, когда я создал вложенный класс в своем Startup.cs, чем реализовал IProfileService, у меня не было ошибок.
Это подтверждение моего сервера идентификации.
var identityServer = services.AddIdentityServer(options =>
{
options.Events.RaiseErrorEvents = true;
options.Events.RaiseInformationEvents = true;
options.Events.RaiseFailureEvents = true;
options.Events.RaiseSuccessEvents = true;
options.Authentication.CookieLifetime = TimeSpan.FromSeconds(7200);
})
// this adds the config data from DB (clients, resources, CORS)
.AddConfigurationStore(options =>
{
options.ConfigureDbContext = builder =>
builder.UseSqlServer(connectionString,
sql => sql.MigrationsAssembly(migrationsAssembly));
})
// this adds the operational data from DB (codes, tokens, consents)
.AddOperationalStore(options =>
{
options.ConfigureDbContext = builder =>
builder.UseSqlServer(connectionString,
sql => sql.MigrationsAssembly(migrationsAssembly));
// this enables automatic token cleanup. this is optional.
options.EnableTokenCleanup = true;
// options.TokenCleanupInterval = 15; // interval in seconds. 15 seconds useful for debugging
})
.AddAspNetIdentity<ApplicationUser>()
.AddProfileService<ClaimsProfileService>()
.AddExtensionGrantValidator<DelegationGrantValidator>();
Это PackageReferences для основного проекта приложения.
<ItemGroup>
<PackageReference Include = "IdentityServer4" Version = "2.4.0" />
<PackageReference Include = "IdentityServer4.AccessTokenValidation" Version = "2.7.0" />
<PackageReference Include = "IdentityServer4.AspNetIdentity" Version = "2.4.0" />
<PackageReference Include = "IdentityServer4.EntityFramework" Version = "2.4.0" />
<PackageReference Include = "jQuery" Version = "3.3.1" />
<PackageReference Include = "jQuery.Validation" Version = "1.17.0" />
<PackageReference Include = "Microsoft.AspNetCore.App" Version = "2.2.2" />
<PackageReference Include = "Microsoft.jQuery.Unobtrusive.Validation" Version = "3.2.11" />
<PackageReference Include = "Microsoft.VisualStudio.Web.CodeGeneration.Design" Version = "2.2.2" />
<PackageReference Include = "Swashbuckle.AspNetCore" Version = "4.0.1" />
</ItemGroup>
Это проект PackageReferences for Services.
<ItemGroup>
<PackageReference Include = "IdentityServer4" Version = "2.4.0" />
<PackageReference Include = "Microsoft.AspNetCore.Identity" Version = "2.2.0" />
<PackageReference Include = "Microsoft.EntityFrameworkCore" Version = "2.2.2" />
</ItemGroup>
Спасибо за любую помощь в этом вопросе.
Уже исправлено. Только что удалил из папки NuGet версию 2.2 вручную. Затем я переустановил IdentityServer и все заработало.