Но после этого сервер аутентификации всегда генерирует код авторизации и id_token, хотя refresh_token уже удален.
Это потому, что ваш пользователь все еще вошел в систему на веб-странице IdentityServer4 и имеет действительный файл cookie. Токен обновления используется только вашим приложением MVC для получения новых токенов доступа.
Это означает, что веб-сайт MVC обновляет access_token, не требующий refresh_token !!
Нет. Когда срок действия токена истекает, вы получаете несанкционированный доступ (когда MVC вызывает сервер идентификации для нового токена доступа).
Пользователь перенаправляется на IdSrv, где он уже вошел в систему, и, поскольку пользователь авторизовал приложение (он дал свое согласие при первом входе в систему, чтобы позволить этому приложению получить доступ к своим данным), его не спрашивают снова и просто получает токен и возвращается к вашему приложению.
Там новый токен обновления и код используются для получения токена доступа.
Если это правильно, как я могу принудительно выйти из другого устройства? Я застрял здесь очень долго, пожалуйста, помогите!
Вам необходимо внедрить некоторый код в ваше приложение IdSrv4, которое отслеживает различные логины устройств и делает недействительным этот конкретный.
Кроме того, из вашего приложения MVC вы также можете выйти из IdSrv4, когда передаете токен сервера идентификации в качестве подсказки.
Из IdSrv4 Документы
id_token_hint
Когда пользователь перенаправляется на конечную точку, ему будет предложено, если он действительно хочет выйти из системы. Эта подсказка может быть обойдена клиентом, отправляющим исходный id_token, полученный от аутентификации. Это передается как параметр строки запроса с именем id_token_hint.
Это должно сделать недействительным куки пользователя в приложении IdSrv4.
Если это не сработает, вам придется добавить эту функцию в приложение IdSrv4, чтобы сделать недействительным определенный сеанс cookie (с устройства, с которого вы хотите выйти)