Xamarin OAuth2Authenticator Учетная запись Microsoft возвращает неверно сформированный токен JWT для службы приложений Azure
Я создаю приложение 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.