Мы используем Identity Server 4 для управления идентификацией с потоком ResourceOwnerPassword и выдачи маркеров доступа и обновления, и столкнулись со следующей проблемой ...
У нас есть краткосрочные токены доступа (15 минут) и долгоживущее обновлениежетоны (15 дней).После каждого обновления токена обновления мы выдаем новый токен доступа и обновления.Недавно мы столкнулись с проблемой (с повышенным ростом), что все токены обновления за последние 15 дней (срок действия) были сохранены в таблице [PersistedGrants]
, даже после обновления этого токена и выдачи нового старого все еще сохраняются старые токены ссылки.таблица.
Я не знаю, является ли это желаемым поведением или какой-то ошибкой в нашей реализации, но объем данных в этой таблице начинает быстро увеличиваться и вызывает у нас огромные проблемы с производительностью.
Ниже вы можете найти внутренние запросы IS4, которые запрашивают эту таблицу:
SELECT TOP(@__p_0)
[x].[Key], [x].[ClientId], [x].[CreationTime], [x].[Data],
[x].[Expiration], [x].[SubjectId], [x].[Type]
FROM
[PersistedGrants] AS [x]
WHERE
[x].[Expiration] < GETUTCDATE() ORDER BY [x].[Key]
SELECT COUNT(*) FROM PersistedGrants
INSERT INTO [PersistedGrants] ([Key], [ClientId], [CreationTime], [Data], [Expiration], [SubjectId], [Type])
VALUES (@p0, @p1, @p2, @p3, @p4, @p5, @p6)
Может быть, кто-то сталкивался с той же проблемой, или это просто стандартное поведение IS4?
А единственной доступной для нас опцией будет увеличение времени жизни токена доступа на час и увеличение размера БД?Но тогда я не понимаю, зачем IS нужны эти старые жетоны ссылок, если мы уже выпустили новые.
(в настоящее время некоторые пользователи имеют ~ 10k жетонов ссылок в этой таблице)
Спасибо!