Возможно ли иметь клиентское настольное приложение, использующее oauth2, для передачи токена на внутренний сервер, предназначенный для входа в Google для Android - PullRequest
0 голосов
/ 14 декабря 2018

В настоящее время у нас имеется устаревшее настольное приложение, которое использует следующие пакеты для связи с хранилищем Google Диска.

  • com.google.api.services.oauth2.Oauth2 (для проверки подлинности)
  • com.google.api.services.drive.Drive (для связи с Google Диском)

Аутентификация

Так выглядит поток аутентификации

enter image description here

enter image description here

Как только поток успешен, мы получаем объект учетных данных

// flow is com.google.api.client.auth.oauth2.AuthorizationCodeFlow
// credential is com.google.api.client.auth.oauth2.Credential
Credential credential = flow.loadCredential(userId);

Тогда вот как мы используем Credential, чтобы далее общаться с Google Drive

// service is com.google.api.services.drive.Drive
Drive service = new Drive.Builder(httpTransport, JSON_FACTORY, credential).setApplicationName("JStock").build();

Наш план - сохранить код аутентификации.Мы хотим удалить код Google Диска и перейти на наш собственный сервер облачного хранилища.

Наш новый сервер облачного хранилища построен с использованием описанного метода Google Sign-In для Android https://developers.google.com/identity/sign-in/android/backend-auth


Нам было интересно, можно ли использовать com.google.api.client.auth.oauth2.Credential со стороны настольного клиента для связи с сервером, предназначенным для Google Sign-In для Android ?Если да, могу я узнать как?


В примере кода он использует следующий способ для передачи токена с мобильного клиента на внутренний сервер.

// Android code. googleSignInAccount is GoogleSignInAccount from GoogleSignIn API
String idToken = googleSignInAccount.getIdToken();

Ноа как насчет кода рабочего стола, который использует com.google.api.client.auth.oauth2.Credential, правильно ли использовать следующий путь?

// credentials is com.google.api.client.auth.oauth2.Credential
// Is this a correct way, to pass the token to backend server?
// Is it equivalent to googleSignInAccount.getIdToken?
String idToken = credentials.getAccessToken()
...