0

サービス アカウントを使用して Google Sheet API リクエストを実装したいと考えています。私はこのコードを作成しました:

HttpTransport httpTransport = new NetHttpTransport();
        JacksonFactory JSON_FACTORY = new JacksonFactory();

        ClassLoader classLoader = this.getClass().getClassLoader();
        java.io.File path = new java.io.File(classLoader.getResource("i-6dc0c917ee63.p12").getFile());

        GoogleCredential credential = new GoogleCredential.Builder()
            .setTransport(httpTransport)
            .setJsonFactory(JSON_FACTORY)
            .setServiceAccountId("test221@sonora-project.iam.gserviceaccount.com")
            .setServiceAccountPrivateKeyFromP12File(path)
            .setServiceAccountScopes(Arrays.asList(SheetsScopes.SPREADSHEETS))
            .setServiceAccountUser("sonoraw@gmail.com")
            .build();

        Sheets service = new Sheets.Builder(httpTransport, JSON_FACTORY, null)
            .setApplicationName("project")
            .setHttpRequestInitializer(credential).build();

        Sheets.Spreadsheets spreadsheets = service.spreadsheets();
        Spreadsheet includeGridData = spreadsheets.get(spreadsheetId).execute();

しかし、私はこのエラーが発生します:

com.google.api.client.auth.oauth2.TokenResponseException: 401 Unauthorized

この方法で.execute();

この問題を解決する方法を知っていますか?

4

2 に答える 2

0

標準エラー応答に基づいて、エラー 401 が原因でinvalidCredentialsあり、これは認証トークンが無効であるか期限切れであることを示します。

推奨される行動:

問題を修正せずに再試行しないでください。新しい認証トークンを取得する必要があります。

これにより、付与されたトークンが機能しなくなる可能性を予測するためにコードを記述する必要があると述べたトークンの有効期限を確認することができます。また、トークンが機能しなくなる可能性がある理由についても説明します。

  • ユーザーはアクセス権を取り消しました。
  • トークンは 6 か月間使用されていません。
  • ユーザーがパスワードを変更し、トークンに Gmail スコープが含まれています。
  • ユーザー アカウントのトークン リクエストが一定数を超えました。

それが役立つことを願っています!

于 2016-12-28T09:40:33.040 に答える