11

DriveCommandLine アプリケーションをいじって、Drive API について少し学んでいます。ユーザーがブラウザから認証コードをコピー/貼り付けする必要なく、Google ドライブでデスクトップ アプリケーションを認証できるかどうか疑問に思っています。しかし、ブラウザからアプリにトークンを返すだけでしょうか? Dropbox API と Google Documents List API を使用してこれを行うことができますが、Google Drive API でこれを機能させる方法がわかりません。

ありがとう。

Google ドライブ API - DriveCommandLine サンプル アプリ (少し変更):

public class DriveCommandLine {

  private static String CLIENT_ID = APPCONSTANTS.Google.CONSUMER_KEY;
  private static String CLIENT_SECRET = APPCONSTANTS.Google.CONSUMER_SECRET;

  private static String REDIRECT_URI = "urn:ietf:wg:oauth:2.0:oob";

  public static void main(String[] args) throws IOException, URISyntaxException {
    HttpTransport httpTransport = new NetHttpTransport();
    JsonFactory jsonFactory = new JacksonFactory();

    GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
        httpTransport, jsonFactory, CLIENT_ID, CLIENT_SECRET, Arrays.asList(DriveScopes.DRIVE))
        .setAccessType("offline")
        .setApprovalPrompt("force").build();

    String url = flow.newAuthorizationUrl().setRedirectUri(REDIRECT_URI).build();
    System.out.println("Enter authorization code:");
    Desktop.getDesktop().browse(new URI(url));
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    String code = br.readLine();

    GoogleTokenResponse response = flow.newTokenRequest(code).setRedirectUri(REDIRECT_URI).execute();
    GoogleCredential credential = new GoogleCredential().setFromTokenResponse(response);

    //Create a new authorized API client
    Drive service = new Drive.Builder(httpTransport, jsonFactory, credential).build();
}

Google ドキュメント リスト API:

    public void authenticate(){
            GoogleOAuthParameters oauthParameters = new GoogleOAuthParameters();
            oauthParameters.setOAuthConsumerKey(APPCONSTANTS.Google.CONSUMER_KEY);

            OAuthSigner signer;
            if (APPCONSTANTS.Google.USE_RSA_SIGNING) {
                    signer = new OAuthRsaSha1Signer(APPCONSTANTS.Google.CONSUMER_SECRET);
            } else {
                oauthParameters.setOAuthConsumerSecret(APPCONSTANTS.Google.CONSUMER_SECRET);
                signer = new OAuthHmacSha1Signer();
            }

            GoogleOAuthHelper oauthHelper = new GoogleOAuthHelper(signer);

            oauthParameters.setScope(APPCONSTANTS.Google.SCOPES);

            oauthHelper.getUnauthorizedRequestToken(oauthParameters);

            String requestUrl = oauthHelper.createUserAuthorizationUrl(oauthParameters);

            Desktop desktop = Desktop.getDesktop();
            URI url = new URI(requestUrl);
            desktop.browse(url);

            String token = oauthHelper.getAccessToken(oauthParameters);
    }
4

3 に答える 3

7

コマンド ラインのサンプルは簡単にするために作成されたものであり、必ずしも最高のユーザー エクスペリエンスを提供するものではありません。この場合、それらはローカル アプリとして実行されており、OAuth 2.0 のインストール済みアプリ フローを使用しています。そのフローには、redirect_uri が localhost を指すことができるモードがありますが、リダイレクトを受信するために一時的な Web サーバーを起動する必要があります。サンプルを複雑にするのではなく、コードのコピーと貼り付けを必要とする OOB モードを使用します。

デスクトップ アプリを作成している場合は、UX が向上するため、localhost にリダイレクトする方法をお勧めします。

詳細については、 https://developers.google.com/accounts/docs/OAuth2InstalledAppを参照してください。

于 2012-09-21T00:57:05.190 に答える
6

ステップ 1: オフライン アクセス タイプを使用して URL を生成する

flow = new GoogleAuthorizationCodeFlow.Builder(
httpTransport, jsonFactory, CLIENT_ID, CLIENT_SECRET, Arrays.asList(DriveScopes.DRIVE))
.setAccessType("offline")
.setApprovalPrompt("auto").build();
String url = flow.newAuthorizationUrl().setRedirectUri(REDIRECT_URI).build();

ステップ 2: クレデンシャル accessToken と refreshToken を保存する

GoogleTokenResponse response = flow.newTokenRequest(code).setRedirectUri(REDIRECT_URI).execute();
            GoogleCredential credential = new GoogleCredential.Builder().setTransport(httpTransport)
                .setJsonFactory(jsonFactory)
                .setClientSecrets(CLIENT_ID, CLIENT_SECRET)
                .build()
                .setFromTokenResponse(response);
String accessToken = credential.getAccessToken();
String refreshToken = credential.getRefreshToken();

ステップ 3: 必要に応じてトークンを再利用する

GoogleCredential credential1 = new GoogleCredential.Builder().setJsonFactory(jsonFactory)
.setTransport(httpTransport).setClientSecrets(CLIENT_ID, CLIENT_SECRET).build();
credential1.setAccessToken(accessToken);
credential1.setRefreshToken(refreshToken);
Drive service = new Drive.Builder(httpTransport, jsonFactory, credential1).build();

ステップ 4: OAuth を理解してエラーを処理し、トークンを更新する

于 2014-12-09T09:03:27.270 に答える
0

redirect_uri をローカルホスト ページまたはプロジェクト ページに変更します。提供されたリンクのリクエストにより、コードが送信されます。リクエストの URL には code="yourauthcode" が含まれます。例: https://yourwebsite.com/yourpage.htm?code= "yourauthcode"

于 2013-06-20T12:04:56.433 に答える