36761


google-api-php-clientを使用してphpでGmailAPIにアクセスをしておりますが、  
以前よりクライアントIDでの認証を行っておりました。

最近になって、Developer
Consoleから新たにWebアプリケーションのクライアントIDを追加し、追加したクライアントIDのJSONファイルを使って認証を行おうすると、以下のようなエラーメッセージが出るようになり、認証が通らなくなりました。

承認済みのJavaScript生成元は、既に利用していたドメインも新規で取得したドメインも両方認証が通らない状態です。

[code]

    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 で確認できたことは以上です。
    
[/code]

これまでと何が違うものかと調べているのですが、原因がわからず質問させて頂きました。  
新たに追加したクライアントIDの認証を通す方法が変わったのでしょうか...？

下記、該当のコードです。

[code]

    <?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;
        }
    }
    
    ?>
    
[/code]

よろしくお願いいたします。


CC BY-SA 3.0
2017-06-01T10:18:07.930
35190
2017-07-29T05:29:13.870
23010
question
php api oauth google-api
Google APIのOAuth2認証時にinvalid_scopeが発生するようになった


ここで言っていることかもしれません。

GAS で「一部のスコープへのアクセス権限がありません」と怒られたときの対処法  
<http://qiita.com/zk_phi/items/7220b67afa84c58cc160>


CC BY-SA 3.0
2017-07-26T09:16:22.347
36692
2017-07-26T09:16:22.347
24587
35190
answer


具体的な解決策を書いておきます。①OAuth Developer Verification Formで承認を受ける
support.google.com/code/contact/oauth_app_verification ②Allow Risky Access
Permissions By Unreviewed Appsのフォーラムに参加する
groups.google.com/forum/#!forum/risky-access-by-
unreviewed-a‌​pps（残念ながら承認はまだ通ってないの‌​で、未承認の方で対応としました）


CC BY-SA 3.0
2017-07-29T05:29:13.870
36761
2017-07-29T05:29:13.870
23010
35190
answer