не удается получить токен доступа с помощью токена обновления

Я написал настольное приложение на java, у которого есть доступ к гугловскому диску. (он просто выгружает и скачивает файлы).

На данный момент тип доступа - онлайн. когда мне нужно получить доступ к файлам / папкам на диске, я перенаправляю браузер на URL-адрес Google и получаю код доступа:

String code = "code that was returned from brouser"
GoogleTokenResponse response = flow.newTokenRequest(code).setRedirectUri(REDIRECT_URI).execute();
GoogleCredential credential = new GoogleCredential().setFromTokenResponse(response);

все работает хорошо! но мне нужно это перенаправление только в первый раз.

Когда я использую Google, в документации по API Диска Google я обнаружил, что я могу получить токен обновления через перенаправление браузера и сохранить его, например, в БД. (Другими словами, я могу использовать автономный доступ).

И каждый раз, когда мне нужно прочитать данные с диска Google, я получаю токен доступа с помощью токена обновления без перенаправления. а это не?

поэтому я получаю такой токен обновления:

https://accounts.google.com/o/oauth2/auth?access_type=offline&client_id=695230079990.apps.googleusercontent.com&scope=https://www.googleapis.com/auth/drive&response_type=code&redirect_uri=https://localhost

вопрос 1
я получаю код от перенаправления браузера. это токен обновления, не так ли? теперь мне нужно получить токен доступа, используя этот токен обновления.

 $.ajax({
      type: "POST",
      url: 'https://accounts.google.com/o/oauth2/token',
      data: {
        client_id: "695230079990.apps.googleusercontent.com",
        client_secret: 'OWasYmp7YQ...4GJaPjP902R',
        refresh_toke: '4/hBr......................xwJCgQI',
        grant_type: 'refresh_token'
      },
      success: function(response) { 
        alert(response);
      }

    });

но у меня ошибка 400;

вопрос 2), когда я пытаюсь изменить URL-адрес перенаправления, у меня возникает эта ошибка: *

Недействительное значение параметра для redirect_uri: закрытые домены запрещены: https://sampl.ecom

Итак, должен ли я создавать идентификатор клиента веб-приложений вместо установленного приложения из консоли API Google? Не могу ли я изменить URI перенаправления в установленном приложении? Я запуталась, не знаю, что мне использовать.


person grep    schedule 21.08.2013    source источник


Ответы (1)


1) при попытке автономного доступа вы получаете код авторизации, который можно использовать для получения токена доступа и токена обновления.

Для isntance:

https://accounts.google.com/o/oauth2/auth?access_type=offline
&approval_prompt=auto
&client_id=[your id]
&redirect_uri=[url]
&response_type=code
&scope=[access scopes]
&state=/profile

после того, как вы получите код авторизации, вы получите токен обновления.

 static Credential exchangeCode(String authorizationCode)
      throws CodeExchangeException {
    try {
      GoogleAuthorizationCodeFlow flow = getFlow();
      GoogleTokenResponse response =
          flow.newTokenRequest(authorizationCode).setRedirectUri(REDIRECT_URI).execute();
      return flow.createAndStoreCredential(response, null);
    } catch (IOException e) {
      System.err.println("An error occurred: " + e);
      throw new CodeExchangeException(null);
    }
  }

Дополнительную информацию см. В разделе о токенах реализации серверной авторизации.

и после получения токена обновления вы должны его сохранить. дополнительную информацию см. в образце.

2) Если у вас нет установленного приложения, вам следует создать веб-приложения для изменения URL-адреса перенаправления.

person grep    schedule 22.08.2013