Google Drive Quick Start application called DriveCommandLineをインストールして正常に実行しました。また、ドライブアカウントのファイルのうちの1つのファイル情報をGETするために少し修正しました。Googleドライブ/ OAuth - 再利用可能なGoogleCredentialsを入手する方法がわかりません
私が今やってみたいのは、認証コードを何とか保存し、ユーザが認証コードを取得するたびにウェブページにアクセスする必要がなく、それらを再利用することです。私はthis pageをチェックアウトし、OAuth 2.0の資格情報を取得して使用する手順を確認しました。例えば、クラス(MyClassの)を使用するために、私は、Credentialオブジェクトがインスタンス化されるDriveCommandLineにラインを変更した:
Credential credential = MyClass.getCredentials(code, "");
これは、次の例外がスローされることになる:
java.lang.NullPointerException
at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:187)
at com.google.api.client.json.jackson.JacksonFactory.createJsonParser(JacksonFactory.java:84)
at com.google.api.client.json.JsonFactory.fromInputStream(JsonFactory.java:247)
at com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets.load(GoogleClientSecrets.java:168)
at googledrive.MyClass.getFlow(MyClass.java:145)
at googledrive.MyClass.exchangeCode(MyClass.java:166)
at googledrive.MyClass.getCredentials(MyClass.java:239)
at googledrive.DriveCommandLine.<init>(DriveCommandLine.java:56)
at googledrive.DriveCommandLine.main(DriveCommandLine.java:115)
I」はこれらのAPI(GoogleドライブとOAuth)を2日間見ていて、ほとんど進歩が見られませんでした。私は本当に上記のエラーと一般的な永続的な資格情報を取得する問題のいくつかの助けに感謝したいと思います。
この全体の構造は、私にとって不必要に複雑に思えます。誰も私のGoogleのユーザー名とパスワードを渡すだけで簡単な資格情報オブジェクトを作成できない理由を説明してくれますか?
おかげで、 ブライアン・O・キャロル、ダブリン、アイルランド
*更新*
[OK]を、私は上記のエラーを回避得ていると今、私は新しいものを持っています。
最初の問題を回避する方法は、MyClass.getFlow()を変更することでした。代わりにJSONファイルからGoogleClientServicesオブジェクトを作成するので、私はあなたが文字列として直接クライアントIDとクライアントシークレットを入力することができますGoogleAuthorizationCodeFlow.Builderの異なるバージョンを使用しています
flow = new GoogleAuthorizationCodeFlow.Builder(httpTransport, jsonFactory, "<MY CLIENT ID>", "<MY CLIENT SECRET>", SCOPES).setAccessType("offline").setApprovalPrompt("force").build();
を私が今持っている問題は、ということです
An error occurred: com.google.api.client.auth.oauth2.TokenResponseException: 400 Bad Request
{
"error" : "invalid_scope"
}
googledrive.MyClass$CodeExchangeException
at googledrive.MyClass.exchangeCode(MyClass.java:185)
at googledrive.MyClass.getCredentials(MyClass.java:262)
at googledrive.DriveCommandLine.<init>(DriveCommandLine.java:56)
at googledrive.DriveCommandLine.main(DriveCommandLine.java:115)
私はこのために使用されなければならないいくつかの他の余地がある:私は認証コードを交換するために、フロー(GoogleAuthorizationCodeFlowオブジェクト)を使用しようとすると、資格情報オブジェクトのために、私は次のエラーを取得しますか?私は現在、MyClassで提供されているスコープの配列を使用しています。
ありがとう!
おかげで、申し訳ありません私は誤って代わりに私自身のあなたのポストに編集/更新を追加しました。私はまだここに投稿するのに慣れている!私はあなたの提案を実装しようとし、それがどのように行くのか教えてください。 PS - 残念ながら、私はこれに取り組むのに2ヶ月もかかりません。私はすでに2日間過ごしたことに腹が立っている!! : -/ –
frefreshtokenのリターンについて。私は設定後にユーザーのやりとりなしに実行するためのサーバーアプリケーションを作成しました。しかし、数日前(問題なく2か月間稼働していました)、アプリケーションがGoogleドライブを使用するためのアクセスをリクエストするために、複数の認証ページがサーバー上で開かれていることがわかりました。たとえそれがAuthを求めていたとしても、それはまだ働いていました。これがどうして起こるのか? –
はおそらく別の質問です。私もこれを見て、リフレッシュトークンが無作為に期限切れになるまでGoogleに伝えます。それが原因であるかどうかを確認するには、ログに400-invalid grantがあるかどうかを確認します。アプリが複数の場所からリフレッシュトークンをリクエストしている可能性はありますか?そのような場合、新しいリフレッシュトークンが古いものを期限切れにする可能性があると私は信じています。 – pinoyyid