Маркер обновления служит как минимум двум целям. Во-первых, токен обновления является своего рода «доказательством» того, что клиент OAuth2 уже получил разрешение от пользователя на доступ к своим данным, и поэтому может снова запросить новый токен доступа, не требуя от пользователя прохождения всего потока OAuth2. Во-вторых, он помогает увеличить общий поток безопасности по сравнению с долгоживущим токеном доступа. Я коснусь обоих этих моментов немного подробнее.
Обновление токенов как средство не раздражать пользователя
Поговорим о первой цели на примере. Предположим, вы, Пользователь, используете стороннее клиентское веб-приложение, которое хотело взаимодействовать с данными вашей учетной записи YouTube. После того, как вы даете разрешение на Клиентское приложение использовать данные YouTube, вы хотите, чтобы приложение клиента , чтобы подсказать вам для разрешения сновакогда истек срок действия его токена YouTube? Что произойдет, если срок действия токена YouTube будет очень низким, например, 5 минут. Было бы немного раздражать, если бы клиентское приложение запрашивало ваше разрешение хотя бы каждые 5 минут! Решение, которое предлагает OAuth2 для этой «проблемы», - это токены обновления. При использовании токенов обновления токен доступа может оставаться недолговечным (что желательно в случае утечки или кражи токена доступа), а токен обновления может оставаться в течение длительного (эр) -живого, что позволяет Клиенту получить новый доступ. токен, когда срок его действия истекает, не требуя разрешения пользователя (снова).
Но зачем нужен токен обновления? Если цель состоит в том, чтобы не доставить пользователю ошибку с запросами на разрешение, то почему клиент не может просто сказать: «Привет, сервер авторизации, мне нужен еще один токен доступа. Сейчас!»? Или: «Привет, сервер авторизации, вот мой токен с истекшим сроком действия, дай мне новый!». Что ж, токен обновления служит своего рода «доказательством» того, что Клиент в какой-то исходный момент времени получил доступ от Пользователя. Это «доказательство» представляет собой токен обновления, имеющий цифровую подпись Сервера авторизации. Посредством предоставления Клиентом токена обновления сервер авторизации может проверить, что Клиент в какой-то момент в прошлом получил разрешение от пользователя, и клиенту не нужно снова запрашивать у пользователя.
Обновить токен как средство повышения безопасности
Однако возникает вопрос: «Что же произойдет, если токен обновления будет утечка или украден, или просто хранится вредоносным клиентским приложением, которое не избавляется от него по запросу пользователя? Не может ли злоумышленник просто продолжить использовать токен обновления для получения действительного токена доступа на неопределенный срок (или до тех пор, пока он не истечет)? Этот вопрос приводит к обсуждению второй цели, о которой я упоминал, - токенов обновления, способствующих более безопасному потоку.
Проблема, возникающая с токенами доступа, заключается в том, что после приобретения они всегда представляются только серверу ресурсов (например, YouTube). Итак, если токен доступа украден или скомпрометирован, как вы скажете серверу ресурсов не доверять этому токену? Ну, на самом деле ты не можешь. Единственный способ сделать это - изменить закрытый ключ подписи на сервере авторизации (ключ, который изначально подписал токен). Я думаю, это неудобно, а в некоторых случаях (например, Auth0) не поддерживается.
С другой стороны, токены обновления необходимо часто предоставлять серверу авторизации, и поэтому, если один из них будет скомпрометирован, то будет тривиально отозвать или отклонить токен обновления в целом и не нужно менять какие-либо ключи подписи.