Google Drive API показывает экран согласия в браузере сервера - PullRequest
2 голосов
/ 01 октября 2019

Итак, вот код, который я использую для подключения к Google Drive API и аутентификации моих пользователей, проблема, с которой я сталкиваюсь, заключается в том, что всякий раз, когда я вызываю функцию для аутентификации пользователя, на сервере отображается экран согласия (гдеУстановлен tomcat, а не ПК, на котором работает пользователь). Я знаю, что это странная проблема, и я не могу ничего найти по этому вопросу на форумах.

private Credential getCredentials(final NetHttpTransport HTTP_TRANSPORT) throws IOException {

    final String CREDENTIALS_FILE_PATH = "/credentials.json";
    final String TOKENS_DIRECTORY_PATH = "/tokens";
    final List<String> SCOPES = Collections.singletonList(DriveScopes.DRIVE);

    InputStream in = this.getClass().getResourceAsStream(CREDENTIALS_FILE_PATH);
    if (in == null) {
        throw new FileNotFoundException("Resource not found: " + CREDENTIALS_FILE_PATH);
    }
    GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in));

    // Build flow and trigger user authorization request.
    GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
            HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, SCOPES)
            .setDataStoreFactory(new FileDataStoreFactory(new java.io.File(TOKENS_DIRECTORY_PATH)))
            .setAccessType("offline")
            .build();

    LocalServerReceiver receiver = new LocalServerReceiver.Builder().setPort(9999).build();
    return new AuthorizationCodeInstalledApp(flow, receiver).authorize("user");
}

После вызова этого метода приложение открывает браузер сервера по умолчанию (Chrome) и показывает согласиеэкран. Я не знаю, что я делаю здесь не так. Спасибо за помощь. Ура! * * 1004

1 Ответ

2 голосов
/ 01 октября 2019

GoogleAuthorizationCodeFlow.Builder предназначен для использования установленными приложениями.

вам следует использовать GoogleBrowserClientRequestUrl

public void doGet(HttpServletRequest request, HttpServletResponse response)throws IOException {
  String url = new GoogleBrowserClientRequestUrl("812741506391.apps.googleusercontent.com",
      "https://oauth2.example.com/oauthcallback", Arrays.asList(
          "https://www.googleapis.com/auth/userinfo.email",
          "https://www.googleapis.com/auth/userinfo.profile")).setState("/profile").build();
  response.sendRedirect(url);
}

# client-side_applications

...