Войдите с помощью Google для версий приложения UWP и Xamarin.Forms (android) - PullRequest
0 голосов
/ 08 января 2019

Я создал 2 приложения, одно в формах Xamarin (для магазина Google Play) и одно в UWP (для настольных ПК и мобильных устройств). Я хочу реализовать способ, с помощью которого пользователь может войти в систему с помощью третьей стороны (предпочтительно Google), чтобы он мог получить доступ к своим данным из обоих приложений. Мне нужен способ идентифицировать пользователя.

Я уже ввел логин с Google, используя Firebase для приложения Xamarin Forms, которое генерирует мне UserId. Поскольку Firebase еще официально не поддерживается UWP, я попытался использовать OAuth2 для входа в систему с Google, но в UserInfo при условии, что я не вижу способа идентифицировать пользователя, которого я могу использовать в обоих приложениях.

Ниже приведена структура UserInfo, которую я получаю из OAuth2

{
  "sub": "somenumber",
  "name": "somename",
  "given_name": "someGivenName",
  "family_name": "someFamilyName",
  "profile": "https://plus.google.com/somenumber",
  "picture": "https://lh4.googleusercontent.com/-someURL.jpg",
  "gender": "someGender",
  "locale": "someCountry"
}

Использование свойства "sub", вероятно, было бы бесполезным, поскольку пользователь может изменить его, и Google откажется от G +. То же самое верно и для других значений учетной записи, таких как имя пользователя.

Какой подход я могу использовать, чтобы успешно идентифицировать пользователя в обоих приложениях?

EDIT: Вход через Google с использованием Firebase дает мне адрес электронной почты пользователя (он уникален и не будет изменен). Поэтому моя задача, похоже, состоит в том, чтобы найти способ получить адрес электронной почты пользователя после входа в учетную запись Google в UWP. Все примеры, которые я нашел, относятся к устаревшей версии g + api.

1 Ответ

0 голосов
/ 12 января 2019

Я думаю, что нашел хорошее решение для моей проблемы, которое также может помочь другим в такой же ситуации:

Таким образом, если вы хотите использовать сторонний вход в систему и у вас нет одинаковой поддержки на всех платформах (например, вход в систему Firebase и UWP), единственная информация, касающаяся уникального пользователя, не будет изменена в будущем и не зависит от сервера, с которым вы работаете, это адрес электронной почты. Это можно использовать для идентификации пользователя.

Давайте выберем Google в качестве стороннего входа:

Для Xamarin Forms сторонняя документация по входу в систему очень скудна по сравнению с Xamarin.Android, но я нашел очень хорошее руководство здесь . Да, он написан на испанском языке, но Google Chrome переведет его как раз правильно. Чтобы получить электронную почту вместо сгенерированного идентификатора, просто замените

MessagingCenter.Send(FirebaseAuthService.KEY_AUTH, FirebaseAuthService.KEY_AUTH, sg.IdToken);

с

MessagingCenter.Send(FirebaseAuthService.KEY_AUTH, FirebaseAuthService.KEY_AUTH, sg.Email);

Убедитесь, что вы прочитали все инструкции в параграфе «Использовать свои собственные учетные данные» - вы должны изменить идентификатор пакета в схеме протокола манифеста.

Теперь, чтобы получить адрес электронной почты Google с помощью UWP:

Опять же, очень скудная документация. Вам необходимо скачать образцы Oauth2 для .Net с здесь . Затем в OAuthUniversalApp при выполнении первого запроса укажите scope = email, например:

 string authorizationRequest = string.Format("{0}?response_type=code&scope=email%20profile&redirect_uri={1}&client_id={2}&state={3}&code_challenge={4}&code_challenge_method={5}",
                authorizationEndpoint,
                System.Uri.EscapeDataString(redirectURI), 
                clientID,
                state,
                code_challenge,
                code_challenge_method);

Теперь у вас есть электронная почта Google на обеих платформах, поэтому пользователь может использовать свое устройство Android или ПК с Windows для входа в систему с помощью Google. Еще одна важная вещь - сделать для пользователя прозрачным, что у вас будет доступ к электронной почте, и использовать алгоритм шифрования, если вы решите сохранить его, чтобы избежать проблем с безопасностью.

...