Как отозвать постоянный ссылочный токен в Identity Server 3 - PullRequest
0 голосов
/ 16 ноября 2018

У меня есть служба аутентификации, построенная на 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 использование постоянного хранилища и отзывает эти токены?Или мне нужно каким-то образом расширить этот метод или вызвать пользовательский метод?

...