Xamarin.Auth или IdentityModel + IdentityServer4 - PullRequest
0 голосов
/ 05 марта 2019

Кто-нибудь реализовывал аутентификацию IdentityServer4 с использованием Xamarin.Auth или IdentityModel?Я попытался использовать как IdentityModel, так и Xamarin.Auth, и у них обоих не хватает возможностей по внешнему виду.

  1. Я не могу найти способ установить response_type и response_mode в Xamarin.Auth's OAuth2Authenticator.Но мне нравится, как я могу открыть собственный браузер и прослушать события его завершения / ошибки.Что в данном случае, очевидно, приводит к ошибке для неавторизованного клиента, потому что для нашего IdentityServer4 в .Net Core требуются response_type и response_mode.

  2. Мне не удается найти способ взаимодействия ссобственный браузер, использующий IdentityModel. Я читал, что рекомендуемый способ - использовать внешний / собственный браузер вместо веб-просмотра.Добавьте к этому, я получаю ошибку disallowed_useragent при использовании веб-просмотра при попытке аутентификации в Google.

1 Ответ

0 голосов
/ 07 марта 2019

Решено. Я закончил тем, что использовал Xamarin.Auth, работая с IdentityServer4 (в iOS, по крайней мере, на данный момент), поскольку Google Authentication (не android) не был доволен использованием WebView с IdentityModel.

Примечания для других разработчиков, которые могут столкнуться с подобными проблемами с OAuth2Authenticator, работающим с IdentityServer4, ниже рассказывается, что произошло и что сработало для меня:

  1. Оказывается, что response_type и response_mode не требовались в нашем IdentityServer4, поскольку у нас были значения по умолчанию на сервере.

  2. Моя основная проблема заключалась в том, что я получал ошибку «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 /)

...