Xamarin android OAuth с проблемами ADFS и ADAL - PullRequest
0 голосов
/ 12 марта 2019

Я пишу приложение Xamarin.Forms, в котором для аутентификации используется ADAL.Я в настоящее время слежу за потоком здесь.

https://forums.xamarin.com/discussion/comment/367489#Comment_367489

Я использую ADFS для аутентификации и сейчас беспокоюсь только о клиенте Android.Моя проблема заключается в том, что всякий раз, когда я вызываю AcquireTokenAsync, я получаю экран входа в систему, но без содержимого.

enter image description here

Я уже получил подтверждение получения токена отADFS использует почтальон и не имеет проблем.

Мой код (сейчас я просто пытаюсь доказать это, меня не волнует реализация):

         string authority = "https://myserver/adfs";
         string resourceURI = "myidentity";
         string clientID = "123-123-123";
         string clientReturnURI = "http://localhost/";


         var authContext = new AuthenticationContext(authority,false);

            Task.Run(async () =>
            {
                var authResultAsync = await authContext.AcquireTokenAsync(resourceURI, clientID, new Uri(clientReturnURI), PlatformParameters);
            });

Моя платформапараметры задаются в pagerenderer

        protected override void OnElementChanged(ElementChangedEventArgs<Page> e)
    {
        base.OnElementChanged(e);

        this.page = e.NewElement as MainPage;
        this.page.PlatformParameters = new PlatformParameters(this.Context as Activity);
    }

Единственное, что у меня есть, это то, что я получаю это в выводе своей консоли

Failed to validate the certificate chain, error: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.

И я тоже получаю это, но, похоже, этокрасная сельдь (в одном сообщении в блоге только что появился на устройствах Android N, который является уровнем SDK, который я использую)

Rejecting re-init on previously-failed class java.lang.Class<uO>: java.lang.NoClassDefFoundError: Failed resolution of: Landroid/webkit/TracingController; 

Любая помощь по этому вопросу будет принята с благодарностью, я действительно бился головойэто на пару дней.

1 Ответ

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

На основании вашей ошибки, java.security.cert.CertPathValidatorException: Trust anchor for certification path not found. Эта проблема связана с вашим сертификатом, ваше устройство не доверяет вашему сертификату, вы можете проверить доверенные учетные данные на устройстве Android, содержит ли он ваш корневой сертификат и промежуточный сертификат?В основном у вас есть четыре возможных решения для исправления исключения «Не доверенные» на Android с использованием httpclient:

  1. Доверяйте всем сертификатам.Не делайте этого, если только вы действительно не знаете, что делаете.
  2. Создайте собственный SSLSocketFactory, который доверяет только вашему сертификату.Это работает до тех пор, пока вы точно знаете, к каким серверам вы собираетесь подключаться, но как только вам нужно подключиться к новому серверу с другим сертификатом SSL, вам нужно будет обновить приложение.
  3. Создайте файл хранилища ключей, который содержит «главный список» сертификатов Android, а затем добавьте свой собственный.Если срок действия какого-либо из этих сертификатов истекает, вы несете ответственность за их обновление в своем приложении.Я не могу придумать причину сделать это.
  4. Создайте пользовательский SSLSocketFactory, который использует встроенный сертификат KeyStore, но использует альтернативный KeyStore для всего, что не удается проверить по умолчанию.

Вы можете обратиться к этой аналогичной теме. Доверие всем сертификатам с использованием HttpClient через HTTPS

...