#android #cordova #oauth-2.0 #openid-connect
#Android #кордова #oauth-2.0 #openid-connect
Вопрос:
Я застрял с a Not allowed to load local resource: file:///android_asset/www/index.html?code=[code]amp;state=[state]
, когда API аутентификации, использующий стандарт OpenID Connect, пытается перенаправить на мое локальное приложение для Android.
Когда я запускаю свое приложение, если я еще не подключен, выполняется перенаправление на API аутентификации, который запрашивает учетные данные пользователя. Затем, если учетные данные были правильными, API выполнит другое перенаправление на redirectUri
переданное при первом перенаправлении (в качестве параметра запроса). Это redirectUri
предыдущее file:///android_asset/www/index.html
.
Я не знаю, как настроить мое приложение / телефон, чтобы удаленное приложение (API аутентификации) перенаправляло на мое приложение после успешной аутентификации.
Ответ №1:
Для этого доступно несколько вариантов. Рассмотрим те, которые предлагаются в спецификации OAuth 2.0, более конкретно те, которые предполагают внешний пользовательский агент.
Внешний пользовательский агент — собственное приложение может перехватывать ответ от сервера авторизации, используя (1) URI перенаправления со схемой, зарегистрированной в операционной системе, для вызова клиента в качестве обработчика, (2) копирование и вставка учетных данных вручную, (3) запуск локального веб-сервера, (4) установка расширения user-agent или (5) предоставление URI перенаправления, идентифицирующего ресурс, размещенный на сервере, под контролем клиента, что, в свою очередь, делает ответ доступным для собственного приложения.
Вариант 1:
Вы настраиваете перенаправление с использованием пользовательской схемы, зарегистрированной вашим приложением Android, таким образом, ваше приложение вызывается, когда внешний пользовательский агент, браузер, получает ответ, указывающий перенаправление на вашу схему. Учитывая, что существует несколько приложений для Android :), схема должна быть довольно уникальной. Рекомендуется использовать обратное обозначение доменного имени для домена, которым вы владеете, например, если вы владели «app.example.com » схема может быть «com.example.app».
Вариант 2:
Вы перенаправляете куда-то, что просто показывает красивую страницу с кодом, и просите пользователя ввести ее вручную в ваше приложение.
Вариант 3:
Ваше приложение запускает локальный веб-сервер, и вы настраиваете перенаправление на что-то вроде http://localhost:[port]/
. Здесь могут возникнуть проблемы с конфликтами портов, если несколько приложений решат использовать одно и то же.
Вариант 4:
Установив расширение user-agent, у вас будет код, запущенный в браузере, который может автоматически передавать код вашим приложениям, больше для сценариев рабочего стола.
Вариант 5:
Вы настраиваете URI перенаправления, который указывает на некоторый код на стороне сервера, который вы размещаете, и о котором известно вашему клиентскому приложению Android, чтобы оно могло получать код с этого URL.
для получения дополнительной информации по этой теме проверьте: OAuth 2.0 для собственных приложений
В качестве последнего замечания, использование схемы file
URL не будет вариантом. Кроме того, если вы не хотите полностью использовать серверные опции, которые требуют некоторой логики на сервере, вы можете выполнить то же самое, используя гораздо меньше строк кода, написав что-то в виде веб-задачи (обязательно используйте пользовательский домен).
Раскрытие информации: я инженер Auth0.
Комментарии:
1. Спасибо за быстрый ответ! Я сообщу вам как можно скорее, сработало ли это для меня или нет.
2. Как я могу настроить пользовательскую схему, например «com.example.app»? Поскольку это родное / гибридное приложение для Android, у меня нет зарегистрированного домена. Единственный известный мне способ получить доступ к моему приложению — это URL-адрес файла «не вариант».
3. Это просто соглашение об именовании, вы можете попросить зарегистрировать схему с нужным именем. Соглашение заключается только в том, чтобы уменьшить вероятность того, что два приложения зарегистрируют одну и ту же схему.
4. Да, теперь мне просто нужно узнать, как зарегистрировать схему URI в приложении cordova. Просто чтобы убедиться, что я понял вариант 1: если я установлю и использую новую схему URI в моем параметре redirectUri, мое «не разрешено загружать локальный ресурс» будет исправлено?
5. Да, и ваше приложение должно вызываться при выполнении перенаправления со схемой. О том, как это сделать в Android Cordova, я не буду очень полезен.