Вопрос или проблема
У меня есть iOS-приложение, которое использует библиотеку MSAL для аутентификации через Microsoft Entra.
Когда приложение открывается в первый раз, от пользователя ожидается завершение “интерактивного входа”, вводя свое имя пользователя и пароль.
На следующий день, когда пользователь входит в систему, выполняется “тихий вход”, получая новый AccessToken. Затем в приложении есть корпоративные веб-приложения, которые можно открыть с помощью встроенного браузера (мы используем SFSafariView, но можем переключиться на WKWebView).
Проблема в том, что эти веб-приложения, открывающиеся в веб-браузере, имеют свою собственную сессию аутентификации с Microsoft Entra и запрашивают у пользователя аутентификацию с использованием имени пользователя и пароля, что делает тихий вход бесполезным.
Согласно корпоративной политике, мы не используем постоянные сессии, поэтому каждый раз, когда пользователь открывает браузер, ему необходимо войти в систему.
Можете ли вы помочь мне redesign’ить мое приложение так, чтобы это работало бесперебойно – приложение будет использовать AccessToken MSAL для создания активной сессии в встроенном браузере вместо того, чтобы постоянно запрашивать у пользователей имя пользователя и пароль, особенно учитывая, что все они используют единый IdP, который является Azure AD.
Ответ или решение
Для достижения бесшовного логина между вашим нативным iOS приложением и веб-приложениями, открываемыми через встроенный браузер, необходимо правильно настроить использование токенов доступа, полученных через библиотеку MSAL. Поскольку ваши пользователи аутентифицируются в Microsoft Entra (Azure AD), вы можете интегрировать механизм переиспользования токенов так, чтобы пользователи не сталкивались с необходимостью ввода паролей в каждый раз при открытии веб-приложений, работающих в in-app браузере.
Шаги для решения проблемы:
-
Получение токена доступа в приложении:
Убедитесь, что при выполнении аутентификации в вашем приложении вы сохраняете полученные токены доступа. Это достигается с помощью библиотеки MSAL, которая позволяет получить токен при первом входе и при последующих «тихих» входах. -
Передача токена доступа в веб-приложения:
Чтобы обеспечить доступ к токену доступа в ваших веб-приложениях, вам нужно установить соответствующий механизм передачи токенов. Существует несколько способов, как это можно сделать:- Параметры URL: При открытии веб-приложений в in-app браузере, вы можете добавлять токен доступа в параметры URL. Веб-приложение должно уметь извлекать этот токен из URL и использовать его для аутентификации. Например:
https://webapp.com?access_token=YOUR_ACCESS_TOKEN
- Внутренние API: Создайте внутренний API, который будет передавать токен доступа к веб-приложению через JavaScript. Вы можете внедрить JavaScript в веб-страницу, который будет принимать токен, и сохранять его в локальном хранилище или использовать для аутентификации.
- Параметры URL: При открытии веб-приложений в in-app браузере, вы можете добавлять токен доступа в параметры URL. Веб-приложение должно уметь извлекать этот токен из URL и использовать его для аутентификации. Например:
-
Настройка CORS:
Убедитесь, что ваше веб-приложение позволяет кросс-доменные запросы (CORS) с вашего мобильного приложения, чтобы токен можно было отправить и использовать без проблем. -
Использование JWT (JSON Web Token):
Если веб-приложение поддерживает работу с JWT, вы можете собрать необходимые данные и создать JWT на стороне вашего приложения, передавая его при открытии веб-страницы. Это обеспечит дополнительный уровень безопасности при управлении токенами. -
Обработка токенов в веб-приложении:
После получения токена доступ в веб-приложении должен правильно обработать его, чтобы установить сессию. При этом веб-приложение должно быть должным образом настроено на использование токена для аутентификации пользователя без необходимости повторного ввода пароля. - Тестирование и безопасность:
Не забудьте тщательно протестировать новую систему на предмет безопасности, уверившись, что токены не подвержены утечкам и правильно обрабатываются на всех этапах, как в мобильном приложении, так и в веб-приложениях.
Заключение
Переход на динамическую аутентификацию через токены доступа вместо последовательной аутентификации с паролем не только упростит процесс для пользователей, но также улучшит их опыт, делая взаимодействие с приложением более плавным и безопасным. Реализация предложенных решений потребует некоторых технических доработок как в мобильном приложении, так и на стороне веб-приложений, однако это стоит усилий для повышения удобства пользователей в вашей экосистеме.