Google APIのOAuth2認証時にinvalid_scopeが発生するようになった
google-api-php-clientを使用してphpでGmailAPIにアクセスをしておりますが、
以前よりクライアントIDでの認証を行っておりました。
最近になって、Developer Consoleから新たにWebアプリケーションのクライアントIDを追加し、追加したクライアントIDのJSONファイルを使って認証を行おうすると、以下のようなエラーメッセージが出るようになり、認証が通らなくなりました。
承認済みのJavaScript生成元は、既に利用していたドメインも新規で取得したドメインも両方認証が通らない状態です。
400. エラーが発生しました。
エラー: invalid_scope
このアプリは次のスコープへのアクセスの確認が完了していません:
{invalid = [https://mail.google.com/,https://www.googleapis.com/auth/gmail.readonly,https://www.googleapis.com/auth/gmail.modify,https://www.googleapis.com/auth/gmail.compose]}。
サポートについてデベロッパーにお問い合わせください。
デベロッパーの方は、このプロジェクトで上記のスコープが必要な場合は、プロジェクトへのアクセス権限があるアカウントにログインして、もう一度お試しください。
必要でない場合は、サポートについてデベロッパーにお問い合わせください。
Request Details
client_id=xxxxxxxxx.apps.googleusercontent.com
Google で確認できたことは以上です。
これまでと何が違うものかと調べているのですが、原因がわからず質問させて頂きました。
新たに追加したクライアントIDの認証を通す方法が変わったのでしょうか...?
下記、該当のコードです。
<?php
$isDebug = false;
require_once 'google-api-php-client/autoload.php';
session_start();
if ($isDebug) {
var_dump($_SESSION)."<br/>";
}
$client = new Google_Client();
$client->setAuthConfigFile('client_secrets.json');
$client->addScope(array(Google_Service_Gmail::MAIL_GOOGLE_COM, Google_Service_Gmail::GMAIL_COMPOSE, Google_Service_Gmail::GMAIL_MODIFY, Google_Service_Gmail::GMAIL_READONLY));
try {
if (isset($_GET['code'])) {
$client->authenticate($_GET['code']);
$_SESSION['access_token'] = $client->getAccessToken();
$_SESSION['refresh_token'] = $client->getRefreshToken();
$redirect_uri = 'https://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];
header('Location: ' . filter_var($redirect_uri, FILTER_SANITIZE_URL));
exit;
}
if (isset($_SESSION['access_token']) && $_SESSION['access_token']) {
$client->setAccessToken($_SESSION['access_token']);
if ($client->isAccessTokenExpired()) {
if (isset($_SESSION['refresh_token']) && $_SESSION['refresh_token']) {
$client->refreshToken($_SESSION['refresh_token']);
} else {
$authUrl = $client->createAuthUrl();
}
}
} else {
$authUrl = $client->createAuthUrl();
}
if (isset($authUrl)) {
header('Location: '.$authUrl);
exit;
}
} catch (Exception $e) {
echo $e->getMessage();
unset($_SESSION['access_token']);
unset($_SESSION['refresh_token']);
unset($_SESSION['google_client']);
exit;
}
$_SESSION['google_client'] = $client;
echo 'OAuth success.'."\n";
function debug($isDebug, $msg) {
if ($isDebug) {
echo $msg;
}
}
?>
よろしくお願いいたします。