Обеспечивает ли Redirect URI безопасность в реализации OAuth для собственного мобильного приложения?
Я разрабатываю собственное мобильное приложение для Android, которое должно взаимодействовать с сервером с реализацией oAuth2.0 и использую библиотеку Google AppAuth, как описано здесь.
1) Какова цель перенаправления URI, кроме получения кода авторизации / токена доступа обратно в наше приложение. Поскольку URI перенаправления, который должен быть указан в запросе авторизации, должен совпадать с URI, зарегистрированным в консоли API Google, является ли это средством обеспечения того, что элемент управления возвращается только к приложению, зарегистрированному в Google, и нигде больше?
2) Поскольку я получаю токен доступа и токен обновления в своем мобильном приложении и сохраняю его на мобильном устройстве (как показано в примере с кодовыми метками), что если кто-то получит эти данные о токене обновления, идентификаторе клиента и URI перенаправления. Может ли кто-нибудь получить доступ к моему серверу, используя эти данные на своем устройстве?
1 ответ
1) Какова цель перенаправления URI, кроме получения кода авторизации / токена доступа обратно в наше приложение.
Как вы говорите, большинство IDP используют белый список URI перенаправления, связанный с конкретным идентификатором клиента, чтобы ограничить возможность отправки кодов и токенов, в качестве первой линии защиты от кражи токенов. Это хорошо работает в Интернете, где https перенаправляют URI, по крайней мере, предоставляют некоторые основные средства защиты от спуфинга.
До недавнего времени URI перенаправления https плохо подходили для нативных приложений. В Android M появились ссылки на приложения, которые позволяют приложениям запрашивать полномочия https таким образом, чтобы другие вредоносные приложения не могли их захватить. Альтернативный метод, PKCE, обеспечивает немного более слабую защиту, но будет работать на любой версии Android. Однако для PKCE требуется поддержка вашей конечной точки авторизации.
2) если кто-то получит эти данные о маркере обновления [...], может ли кто-нибудь получить доступ к моему серверу, используя эти данные на своем устройстве?
Вообщем да. Если ваши токены просочились в другое вредоносное приложение, они могут использовать их для доступа к данным, к которым эти токены разрешают доступ. Подобные "токены на предъявителя" должны оставаться в секрете, обычно передавая их только по зашифрованному соединению между эмитентом токена и пользователем токена.
Идет работа над связыванием каналов токенов, когда токены могут использоваться только в сочетании с парой асимметричных ключей, которая генерируется и хранится в аппаратном криптомодуле на устройстве. Кража закрытого ключа из таких модулей очень сложна, гораздо больше, чем просто попытка украсть сами токены.
Я бы порекомендовал прочитать OAuth2 для собственных приложений, чтобы ознакомиться с текущими рекомендациями. Чтобы использовать OAuth2 в вашем приложении, я бы порекомендовал использовать библиотеку OpenID AppAuth. Отказ от ответственности: я ведущий сопровождающий AppAuth.