Xamarin OAuth2Authenticator Учетная запись Microsoft возвращает неверно сформированный токен JWT для службы приложений Azure - PullRequest
0 голосов
/ 02 марта 2019

Я создаю приложение Xamarin.Forms для изучения инфраструктуры и работы со службами проверки подлинности при использовании службы приложений Azure для API (также новой для меня).И пытается пройти проверку подлинности с использованием учетной записи Microsoft (Outlook.com)

Я использую класс Xamarin.Auth OAuth2Authenticator, и он возвращает очень своеобразный искаженный токен JWT.Это сводило меня с ума в течение нескольких дней, и, наконец, я решил обратиться к экспертам.

У меня есть интерфейс IAuthService, который будет использоваться приложениями платформы для создания службы аутентификации

public interface IAuthService
{
    Task SignInAsync(string clientId,
    Uri authUrl,
    Uri callbackUrl,
    Action<string> tokenCallback,
    Action<string> errorCallback);
}

Указанная служба (для iOS) построена следующим образом (сокращено для краткости):

public class AuthService : IAuthService
{
    public async Task SignInAsync(string clientId, Uri authUrl, Uri callbackUrl, Action<string> tokenCallback, Action<string> errorCallback)
    {
        var auth = new OAuth2Authenticator(clientId, "openid", authUrl, callbackUrl);
        auth.AllowCancel = true;

        var controller = auth.GetUI();

        await UIApplication.SharedApplication.KeyWindow.RootViewController.PresentViewControllerAsync(controller, true);

        auth.Completed += (s, e) =>
        {
            controller.DismissViewController(true, null);

            if (e.Account != null && e.IsAuthenticated)
            {
                Console.WriteLine(e.Account.Properties["access_token"]);

                tokenCallback?.Invoke(e.Account.Properties["access_token"]);
            }
            else
            {
                errorCallback?.Invoke("Not authenticated");
            }
        };
      ...
    }
}

Поэтому я создаю новый экземпляр класса OAuth2Authenticator, определяя область видимости как «openid»;конечная точка авторизации MS требует области действия.

Когда она попадает в консоль, я вижу, что возвращаемое значение ... но это не похоже ни на один токен JWT, который я видел раньше.

EwB4A8l6BAAURSN/FHlDW5xN74t6GzbtsBBeBUYAAWPAOehpFaoAKb8Kz67ZZzgzBS3KUtHGZri2sbgIJfA5xZYDv5K417HIz2P+ggUeB/gFMxRfXH1Hd1qT90bfo6skGpIc/K2vDgBoRY0VnlA9nnCyct9B2tSaNQn3hZjPOiOchmSCJxrUMILGKdKy4kxxn5qFlTXAy0hWIQjHXcwGeKXDm1w3wY6x8xsmBxNNXor9FluuUXNNTtu4iP6s424JwIiJ7HCyu6ftORXCfIlemRSv5hcHLa1MXS9vUq95lRc08S05Ek7IiUfMiAnYbrqwD7H+vheAtfDc9kYleebyxlFl6gpVKmv43DV2yYgYIqgqswO6ktJ6Gar4zmqUYUIDZgAACGWNlS0Ln+wWSAJC2apVPWWIsKPobIL0uBImdORjOWvFOnLtKhQfCnngoo1Tw1UItqo5FRj1f/KWj3if/DPgWaQx5Bf4tbqCjuuOdEkR9r/Ru1v/ccjrg2oqp0hicWwIoSaQm2JHgnrrCQ1cfcvXhAuVlAo9tKyqW/dCehdz7NRpQbNtmLvba+PjWWYEcDROJJSwTRqNTGkwiwzNhw8p/Zlf7G51F205S4vDZob1MsWythkrUJAjA6MUJy4wZ5B/8ChF7J3WRSTapjr+6mNgvgvhcflGo6GoEID24aSDL6h9QGPylk6zfghksweu9/AmSMO4BKwLDVSr04BJj1n1rfKsadUBqWUQMaXFGu+OfGbOCm6E5zLSJyO2JKbcsI468gb0/vC6FYFJOzp56GXD5brQtKNtu9urtge02kOwaGlHsK2I28BMdCRVFYJI9kEiqhqr342ZDlob7mpBCoNDk1uLLH2MPDAW9NOpq+V0bab+WawINAjl1GY/obL3zRsVNMoAszFSfdbbWS/KDbx6rw5bUPMC37s6LTbECkXHhqeqDlNQs4G9BccfiJNI5CQa+QPmaRNOBKhD2K97Z9fXmAFY155WzTPoIVKupxkPXo0zp/9vOc/HHEtMlkoUUNzxX5Q7T8awfN/7F4IfShXQKEVLaIStdx5istw7rxfuv1v/U+EMj4fmYUW9sNG/5irVyGAAOVvvPNkavLnl+NaKYysvAxYVPlrj+zJIDi5C91MmRhiTfH/Lgyq9Mlr/FaLIa/Ow6rCIjO4oBZSl9dXwLxFI4oQC

Это не закодировано / декодировано.

Я использую authUrl: https://login.microsoftonline.com/common/oauth2/v2.0/authorize Если я попытался использовать v1.0 конечной точки авторизации, операционная система телефона выдает мне сообщение об ошибке аутентификации - недопустимое состояние с сервера,Возможная подделка!

Я настроил службу приложений Azure в качестве моего API, и если я напрямую нажму URL-адрес входа в приложение, он вернет мне правильно сформированный токен, который я затем смогу использовать для доступа к API безпроблема.Это говорит мне о том, что мои cliend_id верны и все должно работать.

Так что я где-то делаю это неправильно.Я не знаю, доверяю ли я классу OAuth2Authenticator от Xamarin при использовании учетных записей MS.Но документация старая и / или отсутствует.Я чувствую, что это будет простой ответ, но я собираюсь косоглазие, пытаясь интерпретировать документацию MS / Xamarin / Googled.

...