Навіщо взагалі потрібні маркери
При розробці додатків, які спілкуються з сервером, зазвичай вилазять наступні етапи:
Навіщо потрібен перший токен
Є багато різних токенов. Звичайні, криптографічні, «access key», «session token», різні схеми отримання, використання і revoke. При цьому одна з ключових ідей полягає в тому, що якщо хто поганий отримає чужий токен, то найнеприємніше, що трапиться - це доступ викрадача до сервісу, від якого токен викрадений. Пароль, той самий, який один на всі сервіси, викрадач не отримає. А користувач, якщо зрозуміє, що крім нього до сервісу отримав доступ хтось інший, може токен відкликати. Після чого отримати собі новий, маючи логін і пароль.Навіщо потрібен другий токен
Схема використання у токенов наступна:
- Користувач логинится в додатку, передаючи логін і пароль на сервер. Вони не зберігаються на пристрої, а сервер повертає два токена і час їх життя
- Додаток зберігає токени і використовує access token для подальших запитів
- Коли час життя access token добігає кінця (додаток може саме його перевіряти, чи дочекатися поки під час чергового використання сервер відповість «ой, все»), додаток використовує refresh token. щоб оновити обидва токена і продовжити використовувати access token
Навіщо насправді потрібен другий токен
Все виявилося і простіше, і складніше ніж я думав. Слідкуйте за руками:Випадок 1: Боб дізнався обидва токена Аліси і не скористався refresh
В цьому випадку Боб отримає доступ до сервісу на час життя access token. Як тільки воно закінчиться і додаток, за допомогою якого Аліса, скористається refresh token. сервер поверне нову пару токенов, а ті, що дізнався Боб, перетворяться на гарбуз.
Випадок 2: Боб дізнався обидва токена Аліси і скористався refresh
Таким чином, схема refresh + access токен обмежує час, на яке атакуючий може отримати доступ до сервісу. У порівнянні з одним токеном, яким зловмисник може користуватися тижнями і ніхто про це не дізнається.