У меня есть программа, которая интегрируется с YouTube Live Streaming API. Он работает на таймерах, поэтому мне было относительно легко запрограммировать получение нового токена доступа каждые 50 минут с помощью токена обновления. У меня вопрос, почему?
Когда я прошел аутентификацию на YouTube, он дал мне токен обновления. Затем я использую этот токен обновления, чтобы получать новый токен доступа примерно раз в час. Если у меня есть токен обновления, я ВСЕГДА могу использовать его для получения нового токена доступа, поскольку срок его действия никогда не истекает. Так что я не вижу, что это более безопасно, чем просто дать мне токен доступа с самого начала и не беспокоиться о всей системе Refresh Token.
authentication
oauth
youtube-api
access-token
refresh-token
Джейсон Аксельрод
источник
источник
Ответы:
В основном, токены обновления используются для получения нового токена доступа.
Чтобы четко различать эти два токена и избежать путаницы, вот их функции, указанные в структуре авторизации OAuth 2.0 :
Теперь, чтобы ответить на ваш вопрос о том, почему вам все еще выдавался токен обновления, а не просто защищать токен доступа, основная причина, указанная Инженерной группой Интернета в токенах обновления :
Для получения более подробной и полной информации о потоке OAuth 2.0 попробуйте просмотреть следующие ссылки:
источник
@Teyam упоминает сообщение SO Почему у OAuth v2 есть как токены доступа, так и токены обновления? но я предпочитаю другой ответ: https://stackoverflow.com/a/12885823/254109
TL; DR
refresh_token
не приносит повышенной безопасности. Это сделано для улучшения масштабируемости и производительности. Затем онaccess_token
может быть сохранен в каком-то быстром временном хранилище (например, в памяти). Это также позволяет разделить серверы авторизации и ресурсов.источник
Маркер обновления служит как минимум двум целям. Во-первых, токен обновления является своего рода «доказательством» того, что клиент OAuth2 уже получил разрешение от пользователя на доступ к своим данным, и поэтому может снова запросить новый токен доступа, не требуя от пользователя прохождения всего потока OAuth2. Во-вторых, он помогает увеличить общий поток безопасности по сравнению с долгоживущим токеном доступа. Я коснусь обоих этих моментов немного подробнее.
Обновление токенов как средство не раздражать пользователя
Поговорим о первой цели на примере. Предположим, вы, Пользователь, используете стороннее клиентское веб-приложение, которое хотело взаимодействовать с данными вашей учетной записи YouTube. После того, как вы даете разрешение на Клиентское приложение использовать данные YouTube, вы хотите, чтобы приложение клиента , чтобы подсказать вам для разрешения сновакогда истек срок действия его токена YouTube? Что произойдет, если срок действия токена YouTube будет очень низким, например, 5 минут. Было бы немного раздражать, если бы клиентское приложение запрашивало ваше разрешение хотя бы каждые 5 минут! Решение, которое предлагает OAuth2 для этой «проблемы», - это токены обновления. При использовании токенов обновления токен доступа может оставаться недолговечным (что желательно в случае утечки или кражи токена доступа), а токен обновления может оставаться в течение длительного (эр) -живого, что позволяет Клиенту получить новый доступ. токен, когда срок его действия истекает, не требуя разрешения пользователя (снова).
Но зачем нужен токен обновления? Если цель состоит в том, чтобы не доставить пользователю ошибку с запросами на разрешение, то почему клиент не может просто сказать: «Привет, сервер авторизации, мне нужен еще один токен доступа. Сейчас!»? Или: «Привет, сервер авторизации, вот мой токен с истекшим сроком действия, дай мне новый!». Что ж, токен обновления служит своего рода «доказательством» того, что Клиент в какой-то исходный момент времени получил доступ от Пользователя. Это «доказательство» представляет собой токен обновления, имеющий цифровую подпись Сервера авторизации. Посредством предоставления Клиентом токена обновления сервер авторизации может проверить, что Клиент в какой-то момент в прошлом получил разрешение от пользователя, и клиенту не нужно снова запрашивать у пользователя.
Обновить токен как средство повышения безопасности
Однако возникает вопрос: «Что же произойдет, если токен обновления будет утечка или украден, или просто хранится вредоносным клиентским приложением, которое не избавляется от него по запросу пользователя? Не может ли злоумышленник просто продолжить использовать токен обновления для получения действительного токена доступа на неопределенный срок (или до тех пор, пока он не истечет)? Этот вопрос приводит к обсуждению второй цели, о которой я упоминал, - токенов обновления, способствующих более безопасному потоку.
Проблема, возникающая с токенами доступа, заключается в том, что после приобретения они всегда представляются только серверу ресурсов (например, YouTube). Итак, если токен доступа украден или скомпрометирован, как вы скажете серверу ресурсов не доверять этому токену? Ну, на самом деле ты не можешь. Единственный способ сделать это - изменить закрытый ключ подписи на сервере авторизации (ключ, который изначально подписал токен). Я думаю, это неудобно, а в некоторых случаях (например, Auth0) не поддерживается.
С другой стороны, токены обновления необходимо часто предоставлять серверу авторизации, и поэтому, если один из них будет скомпрометирован, то будет тривиально отозвать или отклонить токен обновления в целом и не нужно менять какие-либо ключи подписи.
источник
«Так что я не понимаю, насколько это безопаснее, чем просто дать мне токен доступа с самого начала и не беспокоиться о всей системе Refresh Token». Я боролся с тем же вопросом. Короткий ответ: токен обновления необходим, чтобы гарантировать, что срок действия учетных данных не истек.
Пример может помочь: у меня есть база данных, в которой хранятся ваши медицинские записи. Вы соглашаетесь поделиться своими медицинскими записями с супругом. Ваш супруг (а) использует свой токен доступа для чтения ваших записей из моей базы данных. Через две недели ваш (а) супруг (а) снова проверит ваши медицинские записи, и используется токен обновления, чтобы убедиться, что у них все еще есть разрешение (от сервера аутентификации) на просмотр ваших записей. Маркер обновления избавляет вашего супруга от необходимости повторно вводить свои учетные данные (имя пользователя и пароль) на сервер аутентификации, но он гарантирует, что у них по-прежнему есть законный доступ к ресурсу. Никогда не истекающий токен доступа не узнает, лишили ли вы права супруга / супруги на доступ к своим медицинским записям.
источник