Войти на веб-сервер с помощью Google Войти - PullRequest
0 голосов
/ 11 июня 2018

Я подключаюсь к стороннему веб-серверу из HTTP-клиента (Java или Dart - приложение Android), чтобы загрузить некоторые ресурсы (файлы XML или IMG), которые принадлежат текущему пользователю на этом сервере.Этот сайт требует входа в систему с Google Sing-In.У меня все настроено в моем приложении Android для входа пользователя в Google, я получил их авторизацию idToken.Но как на самом деле использовать его в методах HTTP GET или POST для загрузки защищенных ресурсов?

С BASIC-аутентификацией это просто - просто правильно установите заголовок HTTP «Authorization» («Basic» + user: пароль, закодированный как base64), звоните GET, и я скачиваю нужный ресурс.Но я не могу найти информацию о том, как это сделать с помощью Google Sing-In.Я отправляю полученный от Google idToken в некоторых заголовках?Какая еще магия нужна?

1 Ответ

0 голосов
/ 20 июня 2018

Добавление фрагмента кода Java, надеюсь, это поможет:

// (Receive authCode via HTTPS POST)


if (request.getHeader('X-Requested-With') == null) {
  // Without the `X-Requested-With` header, this request could be forged. Aborts.
}

// Set path to the Web application client_secret_*.json file you downloaded from the
// Google API Console: https://console.developers.google.com/apis/credentials
// You can also find your Web application client ID and client secret from the
// console and specify them directly when you create the GoogleAuthorizationCodeTokenRequest
// object.
String CLIENT_SECRET_FILE = "/path/to/client_secret.json";

// Exchange auth code for access token
GoogleClientSecrets clientSecrets =
    GoogleClientSecrets.load(
        JacksonFactory.getDefaultInstance(), new FileReader(CLIENT_SECRET_FILE));
GoogleTokenResponse tokenResponse =
          new GoogleAuthorizationCodeTokenRequest(
              new NetHttpTransport(),
              JacksonFactory.getDefaultInstance(),
              "https://www.googleapis.com/oauth2/v4/token",
              clientSecrets.getDetails().getClientId(),
              clientSecrets.getDetails().getClientSecret(),
              authCode,
              REDIRECT_URI)  // Specify the same redirect URI that you use with your web
                             // app. If you don't have a web version of your app, you can
                             // specify an empty string.
              .execute();

String accessToken = tokenResponse.getAccessToken();

// Use access token to call API
GoogleCredential credential = new GoogleCredential().setAccessToken(accessToken);
Drive drive =
    new Drive.Builder(new NetHttpTransport(), JacksonFactory.getDefaultInstance(), credential)
        .setApplicationName("Auth Code Exchange Demo")
        .build();
File file = drive.files().get("appfolder").execute();

// Get profile info from ID token
GoogleIdToken idToken = tokenResponse.parseIdToken();
GoogleIdToken.Payload payload = idToken.getPayload();
String userId = payload.getSubject();  // Use this value as a key to identify a user.
String email = payload.getEmail();
boolean emailVerified = Boolean.valueOf(payload.getEmailVerified());
String name = (String) payload.get("name");
String pictureUrl = (String) payload.get("picture");
String locale = (String) payload.get("locale");
String familyName = (String) payload.get("family_name");
String givenName = (String) payload.get("given_name");

Для получения подробной информации, найдите все необходимые шаги и ссылки по адресу: https://developers.google.com/identity/sign-in/web/server-side-flow#step_1_create_a_client_id_and_client_secret

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...