У меня есть служба аутентификации, построенная на Identity Server 3. Недавно я переключил ее с JWT на эталонные токены и реализовал SignOutAsync в моем UserService, чтобы отозвать токены, когда пользователь выходит из системы.Код выглядит так:
public override Task SignOutAsync(SignOutContext context)
{
string subjectId = GetSubjectId(context);
_tokenHandleStore.RevokeAsync(subjectId, context.ClientId);
return Task.FromResult(0);
}
И этот код работает.(Интерфейс ITokenHandleStore и метод RevokeAsync были рекомендованы в этой публикации .) Если я скопирую эталонный токен, я смогу использовать его для доступа к моим службам до тех пор, пока пользователь не выйдет из системы.Тогда ссылочный токен больше не работает.Как я и ожидал.
Затем я ввел постоянное хранилище эталонных токенов, используя встроенную в Identity Server реализацию Entity Framework для рабочих данных.Токены записываются и удаляются из хранилища данных, как я ожидаю, но они больше не отзываются, когда пользователь выходит из системы.Я могу скопировать эталонный токен и использовать его для доступа к сервисам даже после того, как пользователь вышел из системы.
Я прошел по коду, и я знаю, что мой метод SignOutAsync вызывается и вызывается _tokenHandleStore.RevokeAsync.
Является ли ITokenHandleStore.RevokeAsync правильным методом для вызова?Что я должен увидеть в таблице токенов базы данных, когда токен отозван?Будет ли он удален или изменен?Я не вижу изменений в данных токена в хранилище данных.Постоянное хранение и отзыв являются встроенными функциями Identity Server, но знают ли они друг о друге?Обнаруживает ли встроенная реализация ITokenHandleStore использование постоянного хранилища и отзывает эти токены?Или мне нужно каким-то образом расширить этот метод или вызвать пользовательский метод?