Java 用 Google API クライアント ライブラリで OAuth 2.0 を使用する

概要

目的: このドキュメントでは、 GoogleCredential Google サービスで OAuth 2.0 認証を行うためのユーティリティ クラスです。対象 一般的な OAuth 2.0 関数の詳細については、 OAuth 2.0 と Java 用 Google OAuth クライアント ライブラリ

概要: Google サービスに保存されている保護されたデータにアクセスするには、次を使用します。 認可には OAuth 2.0 を使用します。 Google API は、さまざまな種類のクライアント アプリケーションで OAuth 2.0 フローをサポートしています。 これらのフローのどれでも、クライアント アプリケーションは、 クライアント アプリケーションと保護されたデータのオーナーにのみ関連付けられている あります。アクセス トークンは、サービス アカウントによってアクセスされる クライアント アプリケーションがアクセスできるデータの種類を定義します( 「タスクの管理」など)。OAuth 2.0 の重要な目標は、安全で信頼性の高い 保護されたデータに簡単にアクセスでき、潜在的な影響を最小限に抑えられます。 盗まれた場合にも記録されます。

Java 用 Google API クライアント ライブラリの OAuth 2.0 パッケージは、 インフラストラクチャの Java 用 Google OAuth 2.0 クライアント ライブラリ

詳細については、次のパッケージの Javadoc のドキュメントをご覧ください。

Google API Console

Google API にアクセスするには、 認証と請求のための Google API Console インストール型アプリケーションでもモバイルアプリでも ウェブサーバー、ブラウザで実行されるクライアントなどです。

認証情報を適切に設定する手順については、 API Console ヘルプ

認証情報

GoogleCredential

GoogleCredential 保護されたリソースにアクセスするための OAuth 2.0 用のスレッドセーフなヘルパークラスです。 アクセス トークンを使用します。たとえば、すでにアクセス トークンがある場合は、 は、次の方法でリクエストを送信できます。

GoogleCredential credential = new GoogleCredential().setAccessToken(accessToken);
Plus plus = new Plus.builder(new NetHttpTransport(),
                             GsonFactory.getDefaultInstance(),
                             credential)
    .setApplicationName("Google-PlusSample/1.0")
    .build();

Google App Engine の ID

この代替クルデンシャルは、Terraform の Google App Engine App Identity Java API。 認証情報とは異なり、認証情報ではクライアント アプリケーションが App Identity API は、エンドユーザーのデータへのアクセスを 独自のデータで処理できます。

AppIdentityCredential を使用する (google-api-client-appengine) この認証情報は、Google App Engine にすべて管理されるため、はるかにシンプルです。 できます。必要な OAuth 2.0 スコープのみを指定します。

urlshortener-robots-appengine-sample からのコード例:

static Urlshortener newUrlshortener() {
  AppIdentityCredential credential =
      new AppIdentityCredential(
          Collections.singletonList(UrlshortenerScopes.URLSHORTENER));
  return new Urlshortener.Builder(new UrlFetchTransport(),
                                  GsonFactory.getDefaultInstance(),
                                  credential)
      .build();
}

データストア

アクセス トークンには通常 1 時間の有効期限があり、その後は 使用しようとするとエラーが発生します。 GoogleCredential 自動的に「更新」されます。つまり、このトークンから 発行します。これは、有効期間の長い更新トークンによって行われます。 トークンでアクセス トークンを 認証コードフロー中の access_type=offline パラメータ(参照: GoogleAuthorizationCodeFlow.Builder.setAccessType(String))。

ほとんどのアプリケーションでは、認証情報のアクセス トークンや あります。認証情報のアクセス トークンや更新トークンを保持するには、 DataStoreFactory の独自の実装を指定する。 StoredCredential を使用する。 または、ライブラリで提供されている以下の実装のいずれかを使用できます。

  • AppEngineDataStoreFactory: Google App Engine Data Store API を使用して認証情報を保持します。
  • MemoryDataStoreFactory: 「永続化」メモリ内に認証情報を保存できます。これは、プロセスの存続期間中に短期的なストレージとしてのみ有用です。
  • FileDataStoreFactory: 認証情報がファイルに保持されます。

App Engine ユーザー: AppEngineCredentialStore は非推奨となっており、まもなく削除されます。Google Cloud コンソールの AppEngineDataStoreFactory StoredCredential を使用します。 認証情報が従来の方法で保存されている場合は、追加された ヘルパー メソッド migrateTo(AppEngineDataStoreFactory) または migrateTo(DataStore) 移行する必要があります

次を使用: DataStoreCredentialRefreshListener GoogleCredential.Builder.addRefreshListener(CredentialRefreshListener) を使用して認証情報を設定します。

認可コードフロー

認可コードフローを使用して、エンドユーザーがアプリケーションに アクセスを許可できます。このフローのプロトコルは、 指定 認可コードの付与

このフローは GoogleAuthorizationCodeFlow を使用して実装されています。 ステップは次のとおりです。

  • エンドユーザーがアプリケーションにログインします。このユーザーを アプリケーションに固有のユーザー ID に置き換えます。
  • AuthorizationCodeFlow.loadCredential(String)) を呼び出します。 し、エンドユーザーの認証情報がすでに知っているかどうかを確認します。 あれば完了です。
  • そうでない場合は、AuthorizationCodeFlow.newAuthorizationUrl() を呼び出します。 エンドユーザーのブラウザから認証ページにアクセスし、 アプリケーションへのアクセスを制御できます。
  • その後、Google の認証サーバーはブラウザを code クエリとともにアプリケーションで指定されたリダイレクト URL パラメータを指定します。code パラメータを使用してアクセス トークンをリクエストします。 AuthorizationCodeFlow.newTokenRequest(String))。
  • AuthorizationCodeFlow.createAndStoreCredential(TokenResponse, String) を使用してください。 認証情報を保存および取得して、保護されたリソースにアクセスすることができます。

GoogleAuthorizationCodeFlow を使用しない場合は、下位レベルのクラスを使用することもできます。

Google API Console でプロジェクトを設定すると、 使用するフローに応じて、さまざまな認証情報から選択します。 詳しくは、OAuth 2.0 の設定に関する記事をご覧ください。 OAuth 2.0 のシナリオをご覧ください。 各フローのコード スニペットを以下に示します。

ウェブサーバーアプリケーション

このフローのプロトコルについては、このモジュールの ウェブサーバー アプリケーションに OAuth 2.0 を使用する

このライブラリが提供するサーブレット ヘルパークラスを使用すると、 認証コードフローについて説明します。具体的なサブクラスを指定するだけで