0

サービス アカウントを使用して、ドメインの Google API にアクセスしようとしています。これは私のチュートリアルですhttps://developers.google.com/accounts/docs/OAuth2ServiceAccount

1つ目: 「console.developers.google.com」にアクセスし、新しいプロジェクトを作成します。プロジェクトにカレンダー API を追加しました。その後、クレデンシャル OAuth「サービス アカウント」を作成します。このキーを使用して、ロール「 https://www.googleapis.com/auth/calendar 」で access_token を作成および作成します。access_token が成功しました。

次に、「admin.google.com」にアクセスして、API クライアント アクセスの管理に進みます。ロール「 https://www.googleapis.com/auth/calendar」を持つクライアント ID を追加しました

しかし、このアクセスを使用して GET リクエストにアクセスすると https://www.googleapis.com/calendar/v3/calendars/[CalendarID]?access_token= ???

私はいつもメッセージを受け取ります

{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "notFound",
    "message": "Not Found"
   }
  ],
  "code": 404,
  "message": "Not Found"
 }
}

私の access_token が私のドメインにアクセスできないようです。これは、access_token を作成するための私のソース コードです。

$private_key = openssl_pkey_get_private('file://key.pem', 'notasecret');

$header = array("alg" => "RS256", "typ" => "JWT");
$header = base64_encode(utf8_encode(json_encode($header)));
$exp = time() + (60 * 60); 


$jwt_cs = array(
   "iss" => "ClientEmail@MyApp",
   "scope" => "https://www.googleapis.com/auth/calendar",
   "aud" => "https://www.googleapis.com/oauth2/v3/token",
   "exp" => $exp,
   "iat" => time(),
   "access_type" => "offline"
);
$jwt_cs = base64_encode(utf8_encode(json_encode($jwt_cs)));

openssl_sign($header.'.'.$jwt_cs, $sign, $private_key, 'sha256WithRSAEncryption');

$sign = base64_encode($sign);

$jwt = $header.'.'.$jwt_cs.'.'.$sign;
$login_data = array(
    'grant_type' => 'urn:ietf:params:oauth:grant-type:jwt-bearer',
    'assertion' => $jwt
);
$url='https://www.googleapis.com/oauth2/v3/token';

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($login_data));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$res = curl_exec($ch);
curl_close($ch);

私の間違いを見せてもらえますか?

4

0 に答える 0