2016-06-01 3 views
0

Каждый раз, когда пользователь входит в систему, он получает новый access_token и новый refresh_token.Как реализовать Обновить токены с некоторой степенью безопасности?

Когда истекает его access_token, он использует свой refresh_token, чтобы получить новый access_token.

Если злоумышленник каким-то образом получает доступ к его refresh_token ... то по OAuth 2.0 documentation:

Сервер авторизации может использовать обновления маркера вращение, в котором новый маркер обновления выдается с каждым доступом ответ обновления токена. Предыдущий токен обновления недействителен, но сохранен сервером авторизации. Если токен обновления скомпрометирован и впоследствии используется как злоумышленником, так и законным клиентом , один из них представит недействительный токен , который будет информировать сервер авторизации о нарушении.

Так что, в основном, если есть refresh_token, то используется дважды, я буду замечать атаку.

А как же, если законный пользователь никогда не использует свой токен обновления (который был украден злоумышленником)? Злоумышленник сможет снова и снова подключаться и обновляться, если законный пользователь не сможет его обнаружить.

Звучит как редкая ситуация? Что делать, если вы приходите ко мне на обед и заходите на мой компьютер, и я получаю ваш refresh_token и access_token, и вы больше никогда не будете использовать этот refresh_token? Никто не заметит атаки.

Что можно решить?

ответ

1

Каждый раз, когда пользователь логины, он получает новый access_token и новый refresh_token

Клиентское приложение получает эти маркеры, а не конечный пользователь.

Злоумышленник сможет войти и обновить снова и снова без законного пользователя возможности обнаружить его

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

Что делать, если вы придете ко мне на обед и вход с моим компьютером

Я никогда не сделал бы этого. Я не такая грубая :) Что на ужин?

+0

Конечно, я имел в виду клиентское приложение! Затем вы говорите «секрет клиента», но когда это приложение для javascript, как я могу справиться с такой ситуацией? Я не найду никаких ресурсов. Что касается обеда, пасты. – lapin

+0

приложение javascript должно использовать неявный тип гранта, который не выдаёт токен обновления, потому что приложение javascript не может хранить секрет клиента. Макароны хорошие :) – iandayman

+0

Хорошо, но тогда, как каждое мобильное приложение там достигает аутентификации (не спрашивая дважды для доверенных лиц). Сервер авторизации и сервер Resouce - это тот же сервер, который мы создали.Неявный поток означает отсутствие токена обновления, а затем, как мобильные приложения там достигают аутентификации? – lapin