質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.02%
Google Cloud Platform

Google Cloud Platformは、Google社がクラウド上で提供しているサービス郡の総称です。エンドユーザー向けサービスと同様のインフラストラクチャーで運営されており、Webサイト開発から複雑なアプリ開発まで対応可能です。

Gmail

GmailとはGoogleによって提供されているウェブメールのサービスのことです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

受付中

Gmail APIでinvalid_grantとなる為、サービスアカウントで当APIを使いたい

yuki_90453
yuki_90453

総合スコア326

Google Cloud Platform

Google Cloud Platformは、Google社がクラウド上で提供しているサービス郡の総称です。エンドユーザー向けサービスと同様のインフラストラクチャーで運営されており、Webサイト開発から複雑なアプリ開発まで対応可能です。

Gmail

GmailとはGoogleによって提供されているウェブメールのサービスのことです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0回答

0グッド

2クリップ

203閲覧

投稿2023/01/09 08:04

編集2023/01/09 08:17

概要

現在、Gmail APを使用し受信したメールを取得する処理を作っています。
OAuth 同意画面の設定では、テストユーザーのみで、ユーザーの種類は、「外部」となっている為、7日を超えるとトークンの更新が必要になります。

(有料のGoogle WorkSpaceを使用していないので、ユーザーの種類は変更出来ません)

7日を超えるとその都度トークンの更新をするのは面倒なので、それをトークンを長期間更新しないで済む方法を探した所、「サービスアカウントであれば、トークンの更新が必要ない」という記事を見ました。
Google API で Token has been expired or revoked. のエラー

試したこと

そこでサービスアカウントを作成しましたが、このあとどのようにすればいいのかわかりません。

今までは、認証キーをダウンロードして、下記のようなOAuth認証画面を立ち上げるコードを書いてトークンを生成するプロセスでした。

TypeScript

1import * as credentials from './credentials.json' 2 3 (async() => { 4 const SCOPES = ['https://www.googleapis.com/auth/gmail.modify']; 5 const TOKEN_PATH = 'token.json'; 6 const {google} = require('googleapis'); 7 const fs = require('fs'); 8 9 //クライアントID、秘密キー、リダイレクトURLが入ったJSONファイルを読み込む 10 const {client_secret, client_id, redirect_uris} = credentials.installed; 11 const oAuth2Client = new google.auth.OAuth2(client_id, client_secret, redirect_uris[0]); 12 13 14 //認証用URLの生成 15 let url = oAuth2Client.generateAuthUrl({scope:SCOPES}); 16 console.log('自動でブラウザが開かない場合は手動でURLを開いてください:' + url); 17 18 //ブラウザで認証用URLを開く 19 const exec = require('child_process').exec; 20 exec('start ' + url.replace(/&/g, '^&')); //^&は&のエスケープ処理 21 22 //コード入力用 23 const readline = require('readline'); 24 const rl = readline.createInterface({input: process.stdin,output: process.stdout}); 25 rl.question('表示されたコードを貼り付けてください:', (code:any) => { 26 rl.close(); 27 oAuth2Client.getToken(code, (err:any, token:any) => { 28 if (err) { 29 return console.error('アクセストークンの取得に失敗しました', err); 30 } 31 const fs = require('fs'); 32 console.log('下記のコードを手動でコピーして保存して下さい。') 33 console.log(JSON.stringify(token)) 34 fs.writeFile(TOKEN_PATH, JSON.stringify(token), (err:any) => { 35 if (err) { 36 return console.error(err); 37 } 38 console.log('トークンを ' + TOKEN_PATH + ' に保存しました'); 39 }); 40 }); 41 }); 42})();

質問

サービスアカウンを使用して、Gmail APIを使用する場合、どのようにTokenを生成すれば良いでしょうか?
それともサービスアカウントであれば、Tokenを生成する必要はないのでしょうか?

簡単なアドバイスでも良いので、助言をお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.02%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Google Cloud Platform

Google Cloud Platformは、Google社がクラウド上で提供しているサービス郡の総称です。エンドユーザー向けサービスと同様のインフラストラクチャーで運営されており、Webサイト開発から複雑なアプリ開発まで対応可能です。

Gmail

GmailとはGoogleによって提供されているウェブメールのサービスのことです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。