🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

OAuth 2.0

OAuth 2.0(Open Authorization 2.0)は、APIを通して保護されたリソース(サードパーティのアプリケーション)へアクセスする為のオープンプロトコルです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

4188閲覧

Oauthにて取得したrefresh_tokenの使い回しは安全ですか?

hicomon

総合スコア5

Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

OAuth 2.0

OAuth 2.0(Open Authorization 2.0)は、APIを通して保護されたリソース(サードパーティのアプリケーション)へアクセスする為のオープンプロトコルです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2020/01/06 11:14

編集2020/01/06 11:24

前提・実現したいこと

Googleアカウントに紐付いているGoogle My businessの情報を取得するため、Google My business APIを使用しています。その際に必要なトークンの扱い方に関する質問です。

######実装した流れ

1.GCPにてプロジェクトを作成。

2.上記プロジェクトにてGoogle My business APIの使用許可を申請。

3.許可がおりたのでGoogle My business APIを有効にして、「認証情報」より「OAuth クライアント ID の作成」をする。

4.上記"OAuthクライアントID"のクライアントID、クライアントシークレットを元に、一度Oauth認証をするコードを書き、Oauth認証をする。その際に取得したリフレッリュトークンをメモする。

5.上記リフレッシュトークンを元に、アクセストークンを再度発行してもらい、そのアクセストークンを元にAPIにリクエストを送るコードを書く。

6.無事にAPIより情報を取得できた。

発生している問題

問題というより疑問なのですが、上記の5の部分のコードは下記の通りなのですが、リフレッシュトークンはこの様に使いまわしてもセキュリティ的には問題ないのでしょうか。

もちろん漏洩してはいけないトークンなどは環境変数に格納しており、Githubなどにはpushしていません。
私見の限り、サーバーに侵入されトークンを記載しているファイル等にアクセスされない限り、問題はないと思うのですが、それ以外にセキュリティ的に問題はありますでしょうか。

もしくは更にセキュアにできる方法ございましたらご教授いただけますと幸いです。

php

1 2 $params = array( 3 'refresh_token' => REFRESH_TOKEN, //4でメモしたリフレッシュトークン 4 'grant_type' => 'refresh_token', 5 'client_id' => CLIENT_KEY, 6 'client_secret' =>CLIENT_SECRET, 7 ); 8 9 $options = array('http' => array( 10 'method' => 'POST', 11 'content' => http_build_query($params), 12 )); 13 $res = file_get_contents('https://www.googleapis.com/oauth2/v4/token', false, stream_context_create($options)); 14 15 $token = json_decode($res, true); 16 17 $access_token = $token['access_token']; 18 19//ここまででリフレッシュトークンを元にアクセストークンを再発行してもらっている。 20 21 22//下記でAPIより情報を取得 23 $params = array('access_token' => $access_token); 24 $res = file_get_contents('APIのエンドポイント'. '?' . http_build_query($params));

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/01/06 11:20

refreshトークンの期限ないなら問題ない
hicomon

2020/01/06 14:17

refreshトークンに期限はないです。kawaxさんが回答してくださっているとおり問題はなさそうですね! ありがとうございます!
退会済みユーザー

退会済みユーザー

2020/01/06 14:41

Google は半年だったはずだけど
guest

回答1

0

ベストアンサー

問題ない。

これを使うことを覚えたほうがいいとは思うけど。
https://github.com/googleapis/google-api-php-client

Google My business APIがサービスアカウントで使えるならサービスアカウントがいいかも。
GoogleはAPIごとにサービスアカウントで使えたり使えなかったりなので調べてもらうしかない。

投稿2020/01/06 11:55

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hicomon

2020/01/06 14:21

回答ありがとうございます! ライブラリの使用、試みてみます! Google My business APIについてはサービスアカウントが使えなさそうだったので、今回の仕様になったんですよね。でもとりあえず、今回のやり方でも問題がなさそうで安心しました。ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問