Mobile Safari не перенаправляет на URL-адрес приложения - PullRequest
0 голосов
/ 20 февраля 2020

Чтобы понять, как на самом деле работает OAuth2, я написал фиктивный сервис идентификации (ASP. NET Core 3) с конечной точкой /authorize и /token. Я также написал тестовый клиент Xamarin iOS, чтобы посмотреть, как все это может сработать. Клиент вызывает конечную точку доступа (/authorize) с типичным запросом на предоставление кода авторизации OAuth2, передавая все необходимые параметры запроса, такие как clientId, clientSecret, etcetera, (et c.) И * 1006. *.

Когда моя служба авторизации принимает запрос (он предназначен только для тестирования, поэтому доверие или реальная безопасность здесь не проблема ...) он выдает код авторизации и отправляет его в качестве параметра запроса через 302 ( перенаправить) назад к пройденному redirect_uri. Предполагая, что redirect_uri = "callme://authcode" я добавил «callme» в качестве пользовательской схемы URI для моего клиента Xamarin iOS (info.plist) и перешел к переопределению AppDelegate.OpenUrl, чтобы перехватить перенаправление из Safari.

Кажется, все работает нормально, пока Safari не перенаправит на callme://authcode. Вместо простого вызова переопределенного AppDelegate.OpenUrl появляется диалоговое окно, запрашивающее у пользователя разрешение на открытие тестового клиентского приложения. Но даже если я принимаю запрос на навигацию, больше ничего не происходит, и через несколько секунд iOS 13 (в симуляторе) по какой-то причине убивает мое приложение.

Ранее я использовал ADAL для Azure -обеспеченного OAuth2-гранта. потоки, которые работали нормально, но я должен делать что-то не то, что ADAL, потому что у меня другое поведение.

Может кто-нибудь помочь мне понять, что происходит в Safari и iOS? Почему Safari запрашивает разрешение на открытие приложения, которое инициировало исходный запрос (этого не происходит с ADAL), и почему AppDelegate.OpenUrl не вызывается?

Есть ли какие-либо нюансы в потоке перенаправления, которые я мог бы пропустили?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...