Решено. Я закончил тем, что использовал Xamarin.Auth, работая с IdentityServer4 (в iOS, по крайней мере, на данный момент), поскольку Google Authentication (не android) не был доволен использованием WebView с IdentityModel.
Примечания для других разработчиков, которые могут столкнуться с подобными проблемами с OAuth2Authenticator, работающим с IdentityServer4, ниже рассказывается, что произошло и что сработало для меня:
Оказывается, что response_type и response_mode не требовались в нашем IdentityServer4, поскольку у нас были значения по умолчанию на сервере.
Моя основная проблема заключалась в том, что я получал ошибку «client_unauthorized», когда Xamarin.Auth запрашивал токен, потому что RedirectUrl имел косую черту в конце, а настроенный RedirectUrl - нет.
- Мой RedirectUrl не имел косой черты в конце при инициализации OAuth2Authenticator
- Дополнительная косая черта в конце была волшебным образом добавлена, когда я преобразовал NSUrl в Uri внутри метода OpenUrl в AppDelegate.cs перед вызовом OneListAppContext.AuthenticationState.Authenticator.OnPageLoading (url).
- Я полагаю, это стандартная косая черта перед вопросительным знаком в URL-запросе? Если это так, я не знал этого, потому что добавление? Name = value в URL всегда работало.
- NSUrl, исходящий из Safari в методе OpenUrl, был myappname: // oauth? Code = 1ec450f88737fcae0a2786699d5df24e3ca97a8b55c09da2ef13d58035821134 ...
- Новый Uri после преобразования NSUrl в Uri был myappname: // oauth /? Code = 1ec450f88737fcae0a2786699d5df24e3ca97a8b55c09da2ef13d58035821134 ... (обратите внимание, что / после oauth)
Исправление было довольно простым:
1. Измените настроенный RedirectUrl, чтобы мой Клиент имел / в конце (например, myappname: // oauth /)
2. Инициализируйте RedirectUrl в клиенте, чтобы OAuth2Authentic имел / в конце (например, myappname: // oauth /)