Причина, по которой вы испытываете это, заключается в том, что вы не сохраняете ключи защиты данных.В основном IdentityServer реализует защиту данных InMemory, но с балансировщиком нагрузки это не работает для вас.
Что вам нужно сделать, это внедрить IXmlRepository
и добавить собственную защиту данных.Он добавляется в startup.cs
и очень важен , чтобы добавить его в конвейер после добавления IdentitiyServer.Что-то вроде:
services.AddIdentityServer()
.
.
.more code here (like AddProfileService() etc.)
.
.
И затем (позже в конвейере) вам нужно:
serviceProvider = services.BuildServiceProvider();
services.AddDataProtection()
.AddKeyManagementOptions(options =>
{
options.XmlRepository = serviceProvider.GetService<IXmlRepository>();
})
.SetDefaultKeyLifetime(TimeSpan.FromDays(7))
.ProtectKeysWithCertificate(cert)
.SetApplicationName("Application name");
Перед этим вам необходимо зарегистрировать в DI вашу реализацию IXmlRepository
,В моем случае:
services.AddSingleton<IXmlRepository, DataProtectionKeyStore>();
Где DataProtectionKeyStore
- это реализация IXmlRepository
.
Здесь - несколько примеров из официальных документов Microsoft для сохраненияэти ключи, или если вы хотите использовать базу данных, вы также можете реализовать свою собственную логику (это то, что я сделал).
Все вышеперечисленное, конечно, если все с вашим сертификатом в порядке (как выговорят).Но так и должно быть, если он работает, когда не за балансировщиком нагрузки.