Xamarin: iOS Ошибка аутентификации при входе в Microsoft - PullRequest
0 голосов
/ 06 января 2020

Я получаю это диалоговое окно с ошибкой даже после успешного входа в систему с использованием входа в систему Microsoft. enter image description here

Вот код для аутентификации:

#region IMicrosoftLogin implementation
        public async System.Threading.Tasks.Task<Xamarin.Auth.Account> LoginAsync()
        {
            window = UIApplication.SharedApplication.KeyWindow;
            viewController = window.RootViewController;

            var auth = new OAuth2Authenticator(
             "key_here",//for non- prod
                                                    //for production
              "openid email https://graph.microsoft.com/user.read",
              new Uri("https://login.microsoftonline.com/common/oauth2/V2.0/authorize"),
              new Uri("https://myapp_redirect_url"),// for non- prod
              null
          )
            {
                AllowCancel = true
            };
            auth.Completed += Microsoft_Auth_Completed;

            var tcs1 = new TaskCompletionSource<AuthenticatorCompletedEventArgs>();
            d1 = (o, e) =>
            {
                try
                {

                    if (e.IsAuthenticated)
                    {
                        viewController.DismissViewController(true, null);
                        tcs1.TrySetResult(e);
                    }
                    else
                    {
                        viewController.DismissViewController(true, null);
                    }
                }
                catch (Exception)
                {
                    tcs1.TrySetResult(new AuthenticatorCompletedEventArgs(null));
                }
            };

            try
            {
                auth.Completed += d1;
                if (viewController == null)
                {
                    while (viewController.PresentedViewController != null)
                        viewController = viewController.PresentedViewController;
                    viewController.PresentViewController(auth.GetUI(), true, null);
                }
                else
                {
                    viewController.PresentViewController(auth.GetUI(), true, null);
                    UserDialogs.Instance.HideLoading();

                }
                var result = await tcs1.Task;
                return result.Account;

            }
            catch (Exception)
            {
                return null;
            }
            finally
            {
                auth.Completed -= d1;
            }

            //auth.Error += (object sender, AuthenticatorErrorEventArgs eventArgs) => {
            //    auth.IsEnabled = false;
            //};
        }

        private void Microsoft_Auth_Completed(object sender, AuthenticatorCompletedEventArgs e)
        {  /// Break point here is not getting triggered.
            var authenticator = sender as OAuth1Authenticator;

            if (authenticator != null)
            {
                authenticator.Completed -= Microsoft_Auth_Completed;
            }

            if (e.IsAuthenticated)
            {
                var a = e.Account;
            }
            else
            {
            }
        }

Вход в систему asyn c вызывается при нажатии кнопки следующим образом:

btnSignIn.Clicked += async (object sender, EventArgs e) =>
            {
                if (networkConnection != null && networkConnection.CheckNetworkConnection())
                {
                    UserDialogs.Instance.ShowLoading("Loading", null);
                    var loginresult = await MicrosoftLogin.LoginAsync();
.....

MicrosoftLogin.cs

namespace projectnamescpace
{
    public interface IMicrosoftLogin
    {
        Task<Account> LoginAsync();
    }
}

Пожалуйста, помогите мне.

Я уже видел следующие решения для ссылок, и они не работают для меня.

  1. https://forums.xamarin.com/discussion/5866/xamarin-auth-and-infinite-error-alerts
  2. Ошибка аутентификации e.Message = OAuth Ошибка = Разрешения + ошибка
  3. https://forums.xamarin.com/discussion/95176/forms-oauth-error-after-authenticated-unable-to-add-window-token-android-os-binderproxy

1 Ответ

0 голосов
/ 06 января 2020

Возможно, проблема вызвана тем, что HostName было заблокировано из-за политики области.

Вы можете решить эту проблему, изменив DNS (например, на 8.8.8.8) для своей Ma c.

  1. Ваше устройство, Настройки / Wi-Fi
  2. Выберите подключенный Wi-Fi pot
  3. Нажмите DHCP / DNS
  4. Установите на 8.8.8.8

Или вы можете подключить телефон к VPN, чтобы приложения, развернутые на устройстве, могли видеть корпоративные серверы.

...