30

Google に対してプログラムで認証するにはどうすればよいですか? ClientLogin ( https://developers.google.com/accounts/docs/AuthForInstalledApps ) が廃止されたので、OAuth2 を使用して Google に対してプログラムによる認証を実行するにはどうすればよいでしょうか?

ClientLogin を使用すると、 https://www.google.com/accounts/ClientLogin に電子メールとパスワードのパラメーターを指定して投稿を実行し、認証トークンを取得できます。

OAuth2では解決策が見つかりません!

#

私のアプリは Java バックグラウンド プロセスです。次のリンクを見ました:developers.google.com/accounts/docs/OAuth2InstalledApp#refresh、更新されたトークンを使用して新しいアクセストークンを取得する方法。

問題は、新しい有効なアクセス トークンを取得したときに、Analytics オブジェクトをインスタンス化して (たとえば) クエリを実行する方法に関する Java の例が見つからないことです。

これは、「execute()」を呼び出すときに 401 無効な資格情報を返す私のコードです。

public class Test {

static final String client_id = "MY_CLIENT_ID";
static final String client_secret = "MY_SECRET";
static final String appName = "MY_APP";

private static final HttpTransport HTTP_TRANSPORT = new NetHttpTransport();
private static final JsonFactory JSON_FACTORY = new JacksonFactory();

static String access_token = "xxxx";
static String refreshToken = "yyyyy";

public static void main (String args[]){

    try {

        GoogleCredential credential = 
            new GoogleCredential.Builder()
                .setTransport(HTTP_TRANSPORT)
                .setJsonFactory(JSON_FACTORY)
                .setClientSecrets(client_id, client_secret).build();
        credential.setAccessToken(access_token);
        credential.setRefreshToken(refreshToken);
        //GoogleCredential
        Analytics analytics = Analytics.builder(HTTP_TRANSPORT, JSON_FACTORY)
            .setApplicationName(appName)
            .setHttpRequestInitializer(credential)
            .build();

        Accounts accounts = analytics.management().accounts().list().execute();
    } catch (Exception e) {
        e.printStackTrace();
    } 
}

何が問題ですか?

4

4 に答える 4

16

インストール済みアプリケーションの OAuth 2 フローを確認します。

https://developers.google.com/accounts/docs/OAuth2InstalledApp

ユーザーは最初にブラウザーで認証する必要がありますが、その後、更新トークンを保存して、後続の要求に使用できます。

別の解決策については、デバイス フローまたはサービス アカウントを確認してください。これらは同じドキュメント セットで説明されています。

于 2012-05-31T16:28:38.343 に答える
15

私は、Google Java クライアントが過度に複雑で、文書化が不十分であることを発見しました。これは、Google Oauth2 を使用したプレーンでシンプルなサーブレットの例です。バックグラウンド プロセスの場合は、access_type=offline をリクエストする必要があります。他の人が述べたように、ユーザーは1回限りの承認を行う必要があります。その後、Google トークンは 1 時間で期限切れになるため、更新トークンをリクエストできます。

于 2013-10-26T16:36:51.777 に答える
0

自分自身の代わりに (つまり、従来は共有パスワードを使用してロール アカウントにサインインすることによって別のアプリケーションに対して) 認証するアプリケーションの場合、Google が提供する ClientLogin に代わる OAuth2 はサービス アカウントです。

https://developers.google.com/accounts/docs/OAuth2ServiceAccount

于 2012-09-21T18:04:47.987 に答える