Refresh Tokenが生成されない

d-aizawa
Kilo Sage

コミュニティの皆様
いつもお世話になっております。

私はGoogle Cloud Platformのサービスアカウントキーを使用して、
ServiceNowからGoogle Calendarに接続できるかを調査しています。

キー情報をJWTとしてServiceNowに登録し、アクセストークンを取得後
Google Calendarに接続できていることを確認しました。

しかし、生成されると思っていたリフレッシュトークンが生成されませんでした。

リフレッシュトークンが無い場合は「Get OAuth Token」ボタンを1時間に1回押す必要があるので、大変手間になると考えております。
※認識に違いがありましたら、ご指摘をお願いいたします。

設定漏れなど何か原因にお心当たりがある方は、ご教示して頂けないでしょうか。

もう1週間近く調べておりますが、プログラミング初心者ということもあり、
上記の調査がかなり難航しておりますので、ご協力をお願いいたします。

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

Rest Message:find_real_file.png

HTTP Method テスト:

find_real_file.png

 

Manage Token

find_real_file.png

 

 

1 ACCEPTED SOLUTION

iwai
Giga Sage

独自にRestAPIでデータを取得しようとしているのでしたら、下記のURLにあるようなScriptでAccessTokenを毎回取得して、Google Calendarに接続するのはどうでしょうか。毎回だと頻度が高いならスケジュールで定期的に再作成してシステムプロパティーにでも保存しても良いかもしれません。
JWT を使用した Google Cloud API サービス アカウントの認証 - プラットフォーム - 記事 - ServiceNow コミュニティ

私がテストしたときには何故かAccessTokenの後ろに不要な文字化けした文字コードが付いてくる謎の挙動でしたが、後ろを切り捨ててAccessTokenとして使用すれば問題なく動作しました。

また、Googleの別のユーザーになりすましが必要な時は、他の人のCommentにあるように"sub"をpayloadに追加すると良いです。

サービスアカウントを利用した場合は、Refresh Tokenは使わないGoogleの仕様のようです。下記に公式ページを参照してください。

  • サービスアカウント  [一部抜粋]クライアント ID と秘密鍵を使用して署名付き JWT を作成し、適切な形式でアクセス トークン リクエストを作成します。アプリケーションは、トークン リクエストを Google OAuth 2.0 認証サーバーに送信します。このサーバーはアクセス トークンを返します。アプリケーションはこのトークンを使用して Google API にアクセスします。トークンの有効期限が切れると、アプリケーションはこのプロセスを繰り返します。

その他の接続方式にはRefresh Tokenを使った仕様になっています。

  • ウェブサーバーアプリケーション
    https://developers.google.com/identity/protocols/oauth2#webserver
    [一部抜粋]Google がユーザー認証、セッション選択、ユーザーの同意を処理します。その結果、アプリケーションがアクセス トークンや更新トークンと交換できる認証コードが生成されます。

    アプリケーションは、今後の使用のために更新トークンを保存し、アクセス トークンを使用して Google API にアクセスする必要があります。アクセス トークンが期限切れになると、アプリケーションは更新トークンを使用して新しいトークンを取得します。

View solution in original post

1 REPLY 1

iwai
Giga Sage

独自にRestAPIでデータを取得しようとしているのでしたら、下記のURLにあるようなScriptでAccessTokenを毎回取得して、Google Calendarに接続するのはどうでしょうか。毎回だと頻度が高いならスケジュールで定期的に再作成してシステムプロパティーにでも保存しても良いかもしれません。
JWT を使用した Google Cloud API サービス アカウントの認証 - プラットフォーム - 記事 - ServiceNow コミュニティ

私がテストしたときには何故かAccessTokenの後ろに不要な文字化けした文字コードが付いてくる謎の挙動でしたが、後ろを切り捨ててAccessTokenとして使用すれば問題なく動作しました。

また、Googleの別のユーザーになりすましが必要な時は、他の人のCommentにあるように"sub"をpayloadに追加すると良いです。

サービスアカウントを利用した場合は、Refresh Tokenは使わないGoogleの仕様のようです。下記に公式ページを参照してください。

  • サービスアカウント  [一部抜粋]クライアント ID と秘密鍵を使用して署名付き JWT を作成し、適切な形式でアクセス トークン リクエストを作成します。アプリケーションは、トークン リクエストを Google OAuth 2.0 認証サーバーに送信します。このサーバーはアクセス トークンを返します。アプリケーションはこのトークンを使用して Google API にアクセスします。トークンの有効期限が切れると、アプリケーションはこのプロセスを繰り返します。

その他の接続方式にはRefresh Tokenを使った仕様になっています。

  • ウェブサーバーアプリケーション
    https://developers.google.com/identity/protocols/oauth2#webserver
    [一部抜粋]Google がユーザー認証、セッション選択、ユーザーの同意を処理します。その結果、アプリケーションがアクセス トークンや更新トークンと交換できる認証コードが生成されます。

    アプリケーションは、今後の使用のために更新トークンを保存し、アクセス トークンを使用して Google API にアクセスする必要があります。アクセス トークンが期限切れになると、アプリケーションは更新トークンを使用して新しいトークンを取得します。