Slide 1

Slide 1 text

OAuth 
 в мобильных приложениях Мялкин Максим 
 KTS

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

Мялкин Максим Занимаюсь мобильной разработкой в Программирую Android и KMM ‍ Вел курс в скилбоксе и школу KTS Habr Telegram m_myalkin KTS О себе

Slide 4

Slide 4 text

Структура доклада # OAuth и flo` # Authorization Code Flow with PKC$ # Перехват кодI # Нюансы реализации OAut' # Варианты реализации OAut' # Реализация в Android-приложении

Slide 5

Slide 5 text

ДИСКЛЕЙМЕР В рамках доклада OAuth2, OpenID ~ OAuth Почитать про OAuth: P базовое пояснениU P техническое пояснение

Slide 6

Slide 6 text

Базовые flow Authorization Code Flow Resource Owner Password Credentials Flow Client Credentials Flow Implicit Flow Код можно перехватить в зловредном приложении Требует введения credentials внутри приложения Авторизация клиента на основе client_id, client_password Небезопасный и устаревший

Slide 7

Slide 7 text

Authorization Code Flow with PKCE Для мобильных клиентов рекомендуется использовать Authorization Code Flow c дополнением: Authorization Code Flow with Proof Key for Code Exchange (PKCE) RFC8252

Slide 8

Slide 8 text

Authorization Code Flow ) С сервиса авторизации возвращается код в приложениE ) Используем кастомные схемы ) Код меняется на токен внутри приложения com.android.broadcast:// auth.com/callbacd

Slide 9

Slide 9 text

Зловредное приложение App links могут помочь обойти проблему

Slide 10

Slide 10 text

Authorization Code Flow with PKCE code_verifier code_challenge RFC-7636 code_challenge code_verifier и генерируются и сохраняются в приложении Процесс генерации в Обратная трансформация в невозможна. Пример генерации в коде

Slide 11

Slide 11 text

Authorization Code Flow with PKCE code_challenge не возвращается от сервера вместе с кодом

Slide 12

Slide 12 text

Зловред c PKCE

Slide 13

Slide 13 text

Нюансы Реализации % Открытие страницы логин( % Обновление токено % Браузер отсутствуе5 % Логаут

Slide 14

Slide 14 text

Как открывать страницу логина? 9 Использовать 7 9 Открыть страницу в 6 9 Использовать WebView браузере ChromeCustomTabs

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

Открытие через Browser Недостатки: Преимущества: Y Открытие браузера тяжеловесная операциS Y Вы не можете настраивать UI браузерa Y Открывая браузер, вы покидаете навигационный стек приложения Y Открыть страницу очень простg Y Повышенная безопасность пользователS Y Браузер сохраняет cookie пользователя ???

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

Браузер отсутствует 9 Может не быть браузера8 9 Для использования CCT требуется наличие браузера с поддержко 9 CCT поддерживается в большинстве современных браузера& 9 Если браузера с CCT нет, откроется установленный браузер НЮАНС

Slide 20

Slide 20 text

Обновление токенов

Slide 21

Slide 21 text

Логаут E При использовании CCT для в браузере остаются cooki E Почистить cookie из приложения не получитс$ E Чтобы разлогиниться, необходимо открыть страницу логаута в CCF E Не все сервисы поддерживают это поведение НЮАНС

Slide 22

Slide 22 text

Варианты реализации OAuth 4 Использовать сервис( 4 Реализовать 2 4 Использовать SDK вручную библиотеки

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

Ручная реализация Недостатки: Преимущества: b приходится писать код, поддерживать егS b нужно учитывать все нюансы работы oauth b получаем полный контроль над реализациеw b можно реализовать универсальное решение для разных сервисов‰ b отсутствие внешних зависимостей

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

AppAuth Причины выбора: I это достаточно популярная библиотека c I ее Google для реализации OAuthF I есть реализации для Android и для открытым кодоs рекомендует iOS пример использования в iOS

Slide 27

Slide 27 text

Практический пример Весь код доступен на Github

Slide 28

Slide 28 text

Реализуем OAuth с Github отображение информации о моем github- профиле P авторизация пользователяI P обновление токенU P логаут пользователя Функционал: Ключевые моменты:

Slide 29

Slide 29 text

Шаги 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

Slide 30

Slide 30 text

ЛОГАУТ Запуск логаута

Slide 31

Slide 31 text

ОБРАБАТЫВАЕМ РЕДИРЕКТ ЛОГАУТа

Slide 32

Slide 32 text

ОБНОВЛЕНИЕ ТОКЕНА Пример интерцептора

Slide 33

Slide 33 text

ВЫВОДЫ Выбирайте OAuth-flow осознанн$ Учитывайте нюансы реализации авторизаци0 Используйте по возможности готовые инструменты

Slide 34

Slide 34 text

Материалы Ссылки Github Telegram m_myalkin Статья на Habr iOS-версия