Какова цель «токена обновления»?


96

У меня есть программа, которая интегрируется с YouTube Live Streaming API. Он работает на таймерах, поэтому мне было относительно легко запрограммировать получение нового токена доступа каждые 50 минут с помощью токена обновления. У меня вопрос, почему?

Когда я прошел аутентификацию на YouTube, он дал мне токен обновления. Затем я использую этот токен обновления, чтобы получать новый токен доступа примерно раз в час. Если у меня есть токен обновления, я ВСЕГДА могу использовать его для получения нового токена доступа, поскольку срок его действия никогда не истекает. Так что я не вижу, что это более безопасно, чем просто дать мне токен доступа с самого начала и не беспокоиться о всей системе Refresh Token.



1
Токен доступа - это токены на предъявителя . Это означает, что никакой другой идентификации не требуется, и токен доступа - это все, что нужно для выдачи себя за вас. Из-за этого они всегда должны оставаться недолговечными. С другой стороны, токены обновления не являются токенами на предъявителя . Когда вы отправляете токен обновления на YouTube, чтобы получить новый токен доступа, вам также необходимо отправить client_id и client_secret. Из-за этого токен обновления может оставаться более длительным, потому что гораздо менее вероятно, что и токен обновления, и client_secret будут скомпрометированы.
jrahhali

Ответы:


90

В основном, токены обновления используются для получения нового токена доступа.

Чтобы четко различать эти два токена и избежать путаницы, вот их функции, указанные в структуре авторизации OAuth 2.0 :

  • Маркеры доступа выдаются сторонним клиентам сервером авторизации с одобрения владельца ресурса. Клиент использует токен доступа для доступа к защищенным ресурсам, размещенным на сервере ресурсов.
  • Токены обновления - это учетные данные, используемые для получения токенов доступа. Токены обновления выдаются клиенту сервером авторизации и используются для получения нового токена доступа, когда текущий токен доступа становится недействительным или истекает, или для получения дополнительных токенов доступа с идентичной или более узкой областью.

Теперь, чтобы ответить на ваш вопрос о том, почему вам все еще выдавался токен обновления, а не просто защищать токен доступа, основная причина, указанная Инженерной группой Интернета в токенах обновления :

Существует причина безопасности, refresh_tokenобмен происходит только с сервером авторизации, тогда как access_tokenобмен производится с серверами ресурсов. Это снижает риск утечки долгоживущего access_token в «токене доступа, действующем в течение часа, с токеном обновления, действующим в течение года или действующим до отзыва» по сравнению с токеном доступа, действующим до момента отзыва без обновления. жетон ".

Для получения более подробной и полной информации о потоке OAuth 2.0 попробуйте просмотреть следующие ссылки:


5
Должен ли токен обновления также помочь получить новый токен обновления?
Gherman

5
Почему бы просто не приобрести новый недолговечный access_token, когда срок его действия истечет? Зачем иметь долгоживущий refresh_token, если вам все равно нужно запросить у сервера новый access_token? Или это правда, что с refresh_token мне не нужно поддерживать файл cookie провайдера идентификации, и он выдает новые access_tokens на основе refresh_token даже после того, как cookie уже давно ушел, и пользователю придется вводить свои учетные данные, если он хочет получить новый access_token?
JustAMartin

2
@JustAMartin Как клиент OAuth2, без токена обновления, мне нужно будет снова инициировать весь процесс авторизации (заставить пользователя войти в систему и снова дать мне разрешения), чтобы получить еще один токен доступа. Токены обновления обходят это требование как своего рода «доказательство» того, что я, как Клиент, уже получил разрешение Пользователя на запрос токена доступа.
jrahhali

может ли токен обновления иметь идентичные или те же данные, что и токен доступа? поскольку в основном токен обновления используется для облегчения взаимодействия с пользователем и ограничения времени доступа хакеров к ресурсу.
DaviesTobi Alex

8

@Teyam упоминает сообщение SO Почему у OAuth v2 есть как токены доступа, так и токены обновления? но я предпочитаю другой ответ: https://stackoverflow.com/a/12885823/254109

TL; DR refresh_token не приносит повышенной безопасности. Это сделано для улучшения масштабируемости и производительности. Затем он access_tokenможет быть сохранен в каком-то быстром временном хранилище (например, в памяти). Это также позволяет разделить серверы авторизации и ресурсов.


3
за исключением того, что существует причина безопасности, как упомянуто @Teyam: «refresh_token всегда обменивается только с сервером авторизации, тогда как access_token обменивается с серверами ресурсов»
huyz 01

Это будет более безопасно, только если мы предположим, что сервер авторизации каким-то образом лучше защищен, чем сервер ресурсов. Если это не так, это менее безопасно. Если токен обновления скомпрометирован, я могу просто использовать его для получения нового токена доступа.
Арно ван Лисхаут,

6

Маркер обновления служит как минимум двум целям. Во-первых, токен обновления является своего рода «доказательством» того, что клиент OAuth2 уже получил разрешение от пользователя на доступ к своим данным, и поэтому может снова запросить новый токен доступа, не требуя от пользователя прохождения всего потока OAuth2. Во-вторых, он помогает увеличить общий поток безопасности по сравнению с долгоживущим токеном доступа. Я коснусь обоих этих моментов немного подробнее.

Обновление токенов как средство не раздражать пользователя

Поговорим о первой цели на примере. Предположим, вы, Пользователь, используете стороннее клиентское веб-приложение, которое хотело взаимодействовать с данными вашей учетной записи YouTube. После того, как вы даете разрешение на Клиентское приложение использовать данные YouTube, вы хотите, чтобы приложение клиента , чтобы подсказать вам для разрешения сновакогда истек срок действия его токена YouTube? Что произойдет, если срок действия токена YouTube будет очень низким, например, 5 минут. Было бы немного раздражать, если бы клиентское приложение запрашивало ваше разрешение хотя бы каждые 5 минут! Решение, которое предлагает OAuth2 для этой «проблемы», - это токены обновления. При использовании токенов обновления токен доступа может оставаться недолговечным (что желательно в случае утечки или кражи токена доступа), а токен обновления может оставаться в течение длительного (эр) -живого, что позволяет Клиенту получить новый доступ. токен, когда срок его действия истекает, не требуя разрешения пользователя (снова).

Но зачем нужен токен обновления? Если цель состоит в том, чтобы не доставить пользователю ошибку с запросами на разрешение, то почему клиент не может просто сказать: «Привет, сервер авторизации, мне нужен еще один токен доступа. Сейчас!»? Или: «Привет, сервер авторизации, вот мой токен с истекшим сроком действия, дай мне новый!». Что ж, токен обновления служит своего рода «доказательством» того, что Клиент в какой-то исходный момент времени получил доступ от Пользователя. Это «доказательство» представляет собой токен обновления, имеющий цифровую подпись Сервера авторизации. Посредством предоставления Клиентом токена обновления сервер авторизации может проверить, что Клиент в какой-то момент в прошлом получил разрешение от пользователя, и клиенту не нужно снова запрашивать у пользователя.

Обновить токен как средство повышения безопасности

Однако возникает вопрос: «Что же произойдет, если токен обновления будет утечка или украден, или просто хранится вредоносным клиентским приложением, которое не избавляется от него по запросу пользователя? Не может ли злоумышленник просто продолжить использовать токен обновления для получения действительного токена доступа на неопределенный срок (или до тех пор, пока он не истечет)? Этот вопрос приводит к обсуждению второй цели, о которой я упоминал, - токенов обновления, способствующих более безопасному потоку.

Проблема, возникающая с токенами доступа, заключается в том, что после приобретения они всегда представляются только серверу ресурсов (например, YouTube). Итак, если токен доступа украден или скомпрометирован, как вы скажете серверу ресурсов не доверять этому токену? Ну, на самом деле ты не можешь. Единственный способ сделать это - изменить закрытый ключ подписи на сервере авторизации (ключ, который изначально подписал токен). Я думаю, это неудобно, а в некоторых случаях (например, Auth0) не поддерживается.

С другой стороны, токены обновления необходимо часто предоставлять серверу авторизации, и поэтому, если один из них будет скомпрометирован, то будет тривиально отозвать или отклонить токен обновления в целом и не нужно менять какие-либо ключи подписи.


5

«Так что я не понимаю, насколько это безопаснее, чем просто дать мне токен доступа с самого начала и не беспокоиться о всей системе Refresh Token». Я боролся с тем же вопросом. Короткий ответ: токен обновления необходим, чтобы гарантировать, что срок действия учетных данных не истек.

Пример может помочь: у меня есть база данных, в которой хранятся ваши медицинские записи. Вы соглашаетесь поделиться своими медицинскими записями с супругом. Ваш супруг (а) использует свой токен доступа для чтения ваших записей из моей базы данных. Через две недели ваш (а) супруг (а) снова проверит ваши медицинские записи, и используется токен обновления, чтобы убедиться, что у них все еще есть разрешение (от сервера аутентификации) на просмотр ваших записей. Маркер обновления избавляет вашего супруга от необходимости повторно вводить свои учетные данные (имя пользователя и пароль) на сервер аутентификации, но он гарантирует, что у них по-прежнему есть законный доступ к ресурсу. Никогда не истекающий токен доступа не узнает, лишили ли вы права супруга / супруги на доступ к своим медицинским записям.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.