0

GoogleドライブにアクセスできるJavaでデスクトップアプリケーションを作成しました。(ファイルをアップロードおよびダウンロードするだけです)。

現時点では、アクセス タイプはオンラインです。ドライブのファイル/フォルダーにアクセスする必要がある場合は、ブラウザーを Google の URL にリダイレクトし、アクセス コードを取得します。

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

すべてがうまくいきます!しかし、そのリダイレクトは初めて必要です。

私がグーグルで検索すると、Google Drive APIのドキュメントで、ブラウザのリダイレクトを介してリフレッシュトークンを取得し、たとえばDBに保存できることがわかりました。(つまり、オフライン アクセスを使用できます)。

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

では、Google API コンソールからアプリケーションをインストールする代わりに、Web アプリケーション Client ID を作成する必要がありますか? インストール済みアプリケーションのリダイレクト URI を変更できませんか? どれを使えばいいのかわからず困っています。

4

1 に答える 1

0

1) オフライン アクセスを試みると、アクセス トークンと更新トークンに引き換えることができる認証コードを取得します。

例:

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);
    }
  }

詳細については、サーバー側認証トークンの実装に関するセクションを参照してください。

refresh token を取得したら、それを保存する必要があります。詳細については、そのサンプルを参照してください。

2) アプリケーションをインストールしていない場合は、リダイレクト URL を変更する Web アプリケーションを作成する必要があります。

于 2013-08-22T11:34:17.107 に答える