Я только начинаю работать с Google API и OAuth2. Когда клиент авторизует мое приложение, мне выдают «токен обновления» и недолговечный «токен доступа». Теперь каждый раз, когда срок действия токена доступа истекает, я могу отправить свой токен обновления в Google, и они предоставят мне новый токен доступа.
У меня вопрос, какова цель истечения срока действия токена доступа? Почему вместо маркера обновления не может быть только длительного маркера доступа?
Кроме того, срок действия маркера обновления истекает?
См. Использование OAuth 2.0 для доступа к API Google для получения дополнительной информации о рабочем процессе Google OAuth2.
Несколько сценариев могут помочь проиллюстрировать цель доступа и обновления токенов и технические компромиссы при разработке системы oauth2 (или любой другой аутентификации):
Сценарий веб-приложения
В сценарии веб-приложения у вас есть несколько вариантов:
Давайте представим, что кому-то удается угнать ваш сеанс. Единственное, что возможно - это запросить ваши страницы.
Сравнивая 1 и 2:
В 1 access_token и refresh_token путешествуют только по проводам между сервером авторизации (в вашем случае Google) и сервером приложений. Это будет сделано по безопасному каналу. Хакер может захватить сеанс, но он сможет взаимодействовать только с вашим веб-приложением. Во 2 хакер может убрать access_token и сформировать свои собственные запросы к ресурсам, к которым пользователь предоставил доступ. Даже если хакер завладеет access_token, у него будет только короткое окно, в котором он сможет получить доступ к ресурсам.
В любом случае, refresh_token и clientid / secret известны только серверу, поэтому веб-браузер не может получить долгосрочный доступ.
Давайте представим, что вы реализуете oauth2 и установили длинный тайм-аут на токене доступа:
В 1) нет большой разницы между токеном короткого и длинного доступа, так как он скрыт на сервере приложений. Во-вторых, кто-то может получить access_token в браузере, а затем использовать его для прямого доступа к ресурсам пользователя в течение длительного времени.
Мобильный сценарий
На мобильном телефоне есть несколько известных мне сценариев:
Сохраните клиентские данные / секретные данные на устройстве и организуйте доступ к ресурсам пользователя.
Используйте бэкэнд-сервер приложений, чтобы держать клиент / секрет и заставить его выполнять оркестровку. Используйте access_token как своего рода сеансовый ключ и передайте его между клиентом и сервером приложений.
Сравнивая 1 и 2
В 1) Когда у вас есть клиент / секрет на устройстве, они больше не являются секретом. Любой может декомпилировать, а затем начать действовать так, как будто это вы, с разрешения пользователя, конечно. Access_token и refresh_token также находятся в памяти и могут быть доступны на скомпрометированном устройстве, что означает, что кто-то может выступать в качестве вашего приложения, не предоставляя пользователю свои учетные данные. В этом сценарии длина access_token не влияет на возможность взлома, так как refresh_token находится в том же месте, что и access_token. В 2) клиент / секрет или токен обновления скомпрометированы. Здесь длина срока действия access_token определяет, как долго хакер сможет получить доступ к ресурсам пользователей, если они получат его.
Длина истечения
Здесь все зависит от того, что вы защищаете своей системой аутентификации, и от того, как долго должен истекать срок действия вашего access_token. Если это что-то особенно ценное для пользователя, оно должно быть коротким. Что-то менее ценное, это может быть дольше.
Некоторые люди, такие как Google, не имеют срока действия refresh_token. Некоторым нравится стекопоток. Решение об истечении срока действия является компромиссом между простотой и безопасностью пользователя. Длина маркера обновления связана с длиной возврата пользователя, т. Е. Установите для обновления частоту, с которой пользователь возвращается в ваше приложение. Если токен обновления не истекает, единственный способ, которым они отозваны, - с явным отзывом. Обычно вход в систему не отменяется.
Надеюсь, что довольно длинный пост будет полезен.
источник
В дополнение к другим ответам:
После получения токены доступа обычно отправляются вместе с каждым запросом от клиентов на защищенные серверы ресурсов. Это создает риск кражи и воспроизведения токенов доступа (при условии, конечно, что токены доступа имеют тип «Носитель» (как определено в первоначальном RFC6750).
Примеры таких рисков в реальной жизни:
Серверы ресурсов, как правило, являются распределенными серверами приложений и, как правило, имеют более низкий уровень безопасности по сравнению с серверами авторизации (более низкая конфигурация SSL / TLS, меньшая степень защиты и т. Д.). Серверы авторизации, с другой стороны, обычно считаются критически важной инфраструктурой безопасности и подвергаются более серьезной защите.
Токены доступа могут отображаться в следах HTTP, журналах и т. Д., Которые законно собраны для диагностических целей на серверах ресурсов или клиентах. Эти следы можно обменять в общественных или полуобщественных местах (средства отслеживания ошибок, служба поддержки и т. Д.).
Приложения Backend RS могут быть переданы сторонним организациям, более или менее заслуживающим доверия.
Токен обновления, с другой стороны, обычно передается только дважды по проводам, и всегда между клиентом и сервером авторизации: один раз при получении клиентом и один раз при использовании клиентом во время обновления (фактически «истекает» предыдущее обновление). маркер). Это резко ограниченная возможность перехвата и воспроизведения.
Последняя мысль: токены обновления предлагают очень мало защиты, если таковые вообще имеются, от скомпрометированных клиентов.
источник
По сути, это мера безопасности. Если ваше приложение скомпрометировано, злоумышленник будет иметь доступ только к недолговечному токену доступа и не сможет сгенерировать новый.
Срок действия токенов обновления также истекает, но они должны жить намного дольше, чем токен доступа.
источник