Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Реализация OAuth в Android приложениях

Реализация OAuth в Android приложениях

Android Broadcast

August 21, 2022
Tweet

More Decks by Android Broadcast

Other Decks in Programming

Transcript

  1. Зачем это все? @ закрыть нюансы OAuth в мобильных приложенияхB

    @ поделиться опытом настройки OAuth в Android-приложении 
 с использованием библиотеки AppAuth ЦЕЛИ доклада @ в мобильных приложениях требуется интегрировать вход через сторонние сервисƒ @ при обучении мобильной разработке используются открытые API, где для авторизации используется OAuth Статья на Habr iOS-версия
  2. Мялкин Максим Занимаюсь мобильной разработкой в Программирую Android и KMM

    ‍ Вел курс в скилбоксе и школу KTS Habr Telegram m_myalkin KTS О себе
  3. Структура доклада # OAuth и flo` # Authorization Code Flow

    with PKC$ # Перехват кодI # Нюансы реализации OAut' # Варианты реализации OAut' # Реализация в Android-приложении
  4. ДИСКЛЕЙМЕР В рамках доклада OAuth2, OpenID ~ OAuth Почитать про

    OAuth: P базовое пояснениU P техническое пояснение
  5. Базовые flow Authorization Code Flow Resource Owner Password Credentials Flow

    Client Credentials Flow Implicit Flow Код можно перехватить в зловредном приложении Требует введения credentials внутри приложения Авторизация клиента на основе client_id, client_password Небезопасный и устаревший
  6. Authorization Code Flow with PKCE Для мобильных клиентов рекомендуется использовать

    Authorization Code Flow c дополнением: Authorization Code Flow with Proof Key for Code Exchange (PKCE) RFC8252
  7. Authorization Code Flow ) С сервиса авторизации возвращается код в

    приложениE ) Используем кастомные схемы ) Код меняется на токен внутри приложения com.android.broadcast:// auth.com/callbacd
  8. Authorization Code Flow with PKCE code_verifier code_challenge RFC-7636 code_challenge code_verifier

    и генерируются и сохраняются в приложении Процесс генерации в Обратная трансформация в невозможна. Пример генерации в коде
  9. Открытие через WebView ' Реализация через WebView не является безопасной,

    соцсети использовать такой способ реализации OAuth (обход путём подмены user agent не соответствует H ' WebView выполняет js в процессе вашего приложения. В Android O рендеринг в отдельный процесB ' Хранилище cookie у вебвью и браузера разное не позволяют политике Google выделили Недостатки: ' Можем кастомизировать u~ ' Потенциально экран с WebView будет открыт быстрее страницы в браузерŠ ' Взаимодействие с JS Преимущества: НЕТ
  10. Открытие через Browser Недостатки: Преимущества: Y Открытие браузера тяжеловесная операциS

    Y Вы не можете настраивать UI браузерa Y Открывая браузер, вы покидаете навигационный стек приложения Y Открыть страницу очень простg Y Повышенная безопасность пользователS Y Браузер сохраняет cookie пользователя ???
  11. Открытие ЧЕРЕЗ CCT Закрываются недостатки Браузера: Закрываются недостатки WebView: ‚

    CCT позволяет производить в фон† ‚ Открытый CCT не понижает приоритет процесса вашего приложениi ‚ Имеются возможности настройки внешнего вида прогрев ограниченные ‚ Повышенная безопасность пользователi ‚ Сессия шарится между браузером и CCi ‚ JS выполняется во внешнем процессе ДА
  12. Редирект в Chrome не срабатывает Проблема: R Сделать промежуточную веб-страничку

    и редиректить на нееS R Веб-страница автоматически пытается сделать редирект в приложение.S R Если хром блокирует, пользователь может нажать на кнопку перехода явно. Chrome с использованием CCT после успешной авторизации не редиректит по URL с кастомной схемой ( ) блокирует попадание пользователя в зловредное приложение без его ведома. баг в трекере Обновление НЮАНС Как Обойти:
  13. Браузер отсутствует 9 Может не быть браузера8 9 Для использования

    CCT требуется наличие браузера с поддержко 9 CCT поддерживается в большинстве современных браузера& 9 Если браузера с CCT нет, откроется установленный браузер НЮАНС
  14. Логаут E При использовании CCT для в браузере остаются cooki

    E Почистить cookie из приложения не получитс$ E Чтобы разлогиниться, необходимо открыть страницу логаута в CCF E Не все сервисы поддерживают это поведение НЮАНС
  15. Использование SDK Недостатки: Преимущества: Y увеличение внешних зависимостейW Y нет

    возможности добавить сервис, с отсутствующим SDKW Y нет контроля над реализациейW Y индивидуальная реализация для каждого сервиса Y простая реализациy Y возможна авторизация через нативные приложения, если они установлены
  16. Ручная реализация Недостатки: Преимущества: b приходится писать код, поддерживать егS

    b нужно учитывать все нюансы работы oauth b получаем полный контроль над реализациеw b можно реализовать универсальное решение для разных сервисов‰ b отсутствие внешних зависимостей
  17. Использование библиотеки Библиотеки должны поддерживать стандарты OAuth и позволять общаться

    с любыми сервисамI AppAut' Auth0 простая реализациX универсальное решениe легко использовать для начала нужно убедиться, что Auth Service работает в соответствии со стандартоy реализация библиотеки может быть неудобной для встраивания в ваше приложениe доработки делать сложнее Преимущества: Недостатки:
  18. AppAuth Причины выбора: I это достаточно популярная библиотека c I

    ее Google для реализации OAuthF I есть реализации для Android и для открытым кодоs рекомендует iOS пример использования в iOS
  19. Реализуем OAuth с Github отображение информации о моем github- профиле

    P авторизация пользователяI P обновление токенU P логаут пользователя Функционал: Ключевые моменты:
  20. Шаги AppAuth W’ Подключаем библиотекE P’ Создаем AuthConfih ‰’ Указываем

    manifestPlaceholder appAuthRedirectSchem‚ 4’ Создаем AuthorizationService, например во ViewMode8 "’ Авторизуем пользователя в веб€ r’ создаем AuthorizationRequest• ’ формируем intenY x’ запускаем активити с CC ’ Меняем код на токе' r’ получаем TokenExchangeRequest из activity result intent;• ’ выполняем TokenExchangeRequest с помощью authService.performTokenRequest;• x’ сохраняем токены в колбеке. Обертка для работы с AppAuth