Мы создаем приложение Xamarin Forms, пока только Android, которое подключается к веб-API, также созданному нами (ASP.Net Core). Мне удалось настроить аутентификацию OpenId Connect:
- Использование Azure в качестве поставщика удостоверений.
- Использование пользовательских вкладок Android для отображения страницы входа Microsoft.
- Определите, когда пользовательская вкладка перенаправляется на наш URL-адрес перенаправления.
- Получите маркер идентификатора и используйте его в качестве токена-носителя для аутентификации, отправленного нашему веб-API.
- Использование аутентификации JwtBearer в веб-API.
Проблема появляется, когда истекает срок действия токена id. Мы хотим получить новый, не задавая пользователю никаких вопросов.
Для этого мы повторяем процесс аутентификации, добавляя параметры prompt=none
, id_token_hint=THE_TOKEN
и login_hint=THE_USER
в запрос аутентификации, какопределено в спецификации OpenId Connect и поддерживается Azure.
Во время этого запроса у нас возникла проблема с URL-адресом перенаправления:
- Если URL-адрес перенаправления имеет собственную схему (например,
myapp://...
) Azure отвечает с ошибкой interaction_required
. - Если URL-адрес перенаправления имеет схему HTTPS, то Azure отвечает успешно (включая необходимые параметры для продолжения процесса), но я не могу обнаружитьURL перенаправления в пользовательской вкладке Android. Таким образом, мое приложение застревает на пользовательской вкладке, пытаясь загрузить мой недопустимый URL-адрес перенаправления.
Объяснение # 2 заключается в том, что URL-адреса HTTPS обрабатываются браузером (в данном случае Chrome), поэтомуне вызывать никаких действий, которые я могу обнаружить из моего приложения. Это кажется разумным. Я также пытался обнаружить события навигации по пользовательской вкладке из Xamarin, пытаясь определить событие «вручную», но не получилось. Такие события никогда не инициируются.
Теперь, что касается # 1, у меня нет никаких разумных объяснений. Итак, мой вопрос:
Есть ли способ заставить Azure принимать URL-адрес перенаправления с пользовательской схемой при попытке обновить токен id с помощью стандартного параметра prompt=none
OpenId Connect?