web-dev-qa-db-ja.com

Google Calendar APIサービスアカウントエラー

このエラーを得ているim

_{ "error": 
     { "errors": 
         [
            { "domain": "calendar", "reason": "forbiddenForServiceAccounts", "message": "Service accounts cannot invite attendees without Domain-Wide Delegation of Authority." } 
         ], 
         "code": 403,
         "message": "Service accounts cannot invite attendees without Domain-Wide Delegation of Authority."
      } 
}
_

すでにこれに従っています https://developers.google.com/admin-sdk/directory/v1/guides/delegation

laravel 5.7 : https://github.com/spatie/Daravel-google-Calendar

これには修正ができれば。助けてください。

5
Elmo Montilla

この作業を行うための手順は次のとおりです。

あなたのサービスアカウントでドメイン全体の委任を有効にする

1 - あなたのサービスアカウントにカレンダースコープを提供する

2 - あなたのユーザーは役割サービスアカウントトークン作成者を持つ必要があります

3 - 偽装するアカウントでカレンダーを作成する

サービスアカウントにはカレンダーがありませんので、独自のカレンダーを作成する必要があります。

  • https://calendar.google.com/ https://calendar.google.com/ = /カレンダーを所有したい電子メールで、私が偽装しようとしていたものと同じではなく、カレンダーを使用してうまくいっていました。偽装アカウント)
  • カレンダーを作成します
  • カレンダーを変更して管理するための権限を持つサービスアカウントでカレンダーを共有する
  • カレンダーをアカウントで共有するカレンダーを変更および管理するための権限と偽装する予定

Googleクライアントを作成する

  • サービスアカウントを認証します。 (JSONキーを使用しました。その他の認証がこの目的のために機能するかどうかわかりません)

コードサンプル:(私は使用PHP]を使用するが、他の言語が非常によく似ていることを想定しているので、これをガイドラインとして使用できます)

偽装のためにいくつかの電子メールを使用することは非常に重要です。それ以外の場合は、403エラーが残る、認証に使用するには、詳細についてはMaksym Kalin Responseを参照してください。

$google_client = new Google_Client();
$google_client->setAuthConfig($LOCATION_OF_JSON_KEY);
$google_client->setAccessType( 'offline' );
$google_client->setSubject('[email protected]');
$google_client->setApplicationName("YourApplicationName");
$google_client->setScopes([\Google_Service_Calendar::CALENDAR, \Google_Service_Calendar::CALENDAR_EVENTS]);

 _

人が招待された人とイベントを作成します:)して楽しんでください!

注: このアプローチでは、イベントを作成し、人々を招待することができます。 G Suite _の制限 https://support.google.com/a/answer/2905486 SO)のプールを持つサービスアカウントを持つ必要がある場合は、カレンダー。

7
Anathorn

情報のためだけに

私の場合、Node.jsでは、@Anathornからの境骨が追いかけましたが、私は手に入れたままにしていました

サービスアカウントは、権限のドメイン全体の委任なしで出席者を招待することはできません。

それから私は私の認証行を電子メールに追加しました。

const auth = new google.auth.JWT(
    CREDENTIALS.client_email,`
    null,
    CREDENTIALS.private_key,
    SCOPES,
    "[email protected]",
    "12345678987654321"
);
 _
1
Yilo

この問題に遭遇している可能性がある他の誰かのために、それはアナトーンの答えとMaksym Kalinの答えの組み合わせでした。私はユーザーの電子メールアドレスを偽装していなかったからでした。

以前にユーザーが使用しているのと同じライブラリをコミットしようとしました(私もそれを使用しています)が、それはレポーナーによって拒否されました(どれだけ悲しい)

https://github.com/spatie/lavel-google-calendar/pull/97

とにかく、彼のコードは私が私の終わりにそれを修正する方法でした。

この問題を抱えている他の誰かのために頑張って、それは私のお尻の痛みが長すぎるのです。

0
S_W