【Facebook Graph API】ユーザートークン・ページトークン・アプリトークンの違い

# はじめに
FacebookやInstagram、Threadsなどのサービスを提供するMeta社からは、同社のサービスを操作するためのAPIである「[Graph API](https://developers.facebook.com/docs/graph-api?locale=ja_JP)」も提供されています。

例えばFacebookのGraph APIを利用することで、Facebookで作ったページの情報を取得したり、投稿を公開することができるようになります。
※ 2024年4月現在、Instagramでも同様にAPIが提供されています。

ただしGraph APIを使うためには「アクセストークン」という認証情報をAPIに渡してあげる必要があります。

このアクセストークンにはいくつか種類があり、出来ることも異なるため扱いがちょっとややこしいです。。

この記事では、これからFacebookのGraphAPIを使う人や「使っているけどアクセストークンの違いがよくわからない」という人向けに、アクセストークンの種類についてサクッと紹介したいと思います。

# そもそもアクセストークンって？
普段私たちが何かのアプリケーションを利用する場合には、IDとパスワードなどを用いてログインをした上でアプリケーションを利用していると思います。  

これは「誰が」アプリケーションを利用しているのかを識別して適切な情報・機能を提供するために必要な工程です。
しかし、Graph APIを実行する時にはいちいちログインの操作をすることはできません。

そのため「誰々の権限がある状態で操作の代行をしてね」をGraph APIに伝えるため、発行するのが「アクセストークン」です。

アクセストークン自体は1つの文字列として発行されますが、発行者が誰か、許可している権限は何か、有効期限はいつか…など、さまざまな情報が詰まっています。

アクセストークンがあれば、アプリケーションにログインしていなくてもその情報に基づいた操作をAPIから行うことができるようになります。  

言い換えると、「アクセストークンがあれば誰でもアクセストークンの持ち主になりすます」ことができるようになってしまいます。  
そのため、アプリケーションでアクセストークンを使用する場合は、トークンがコードやURL上など、第三者に露出することがないように細心の注意を払って設計をしましょう！

# アクセストークンの種類
MetaのGraph APIでは、アクセストークンを誰として発行したかによってアクセストークンの種類が異なってきます。
ユーザー、ページ、アプリを識別しているので、それぞれが何者なのかを紐解いていきます。

その他のアクセストークンについては公式ドキュメントをご参照ください。

https://developers.facebook.com/docs/facebook-login/guides/access-tokens#usertokens

## ユーザートークン
「Facebookのユーザー」、つまり自分たちが1人ひとつずつ持っているアカウントから発行されたアクセストークンです。
対象のユーザーにまつわる操作権限を持つため、ページやアプリに関する操作はこのアクセストークンからは行えません。

（余談ですが、自分は入社後の研修中にユーザートークンと後述のページトークンの区別がついておらず、私物のユーザーアカウントでテスト投稿を出しまくっていました…）

## ページトークン
「Facebookページ」から発行されたアクセストークンです。
ページごとに発行するため、同じAさんが発行したアクセストークンでもページX、ページYでそれぞれアクセストークンは別物となります。

対象のFacebookページに対して投稿を公開したり、分析情報を取得する時などに使用します。

## アプリトークン
「Facebookアプリ」から発行されたアクセストークンです。
GraphAPIを使用する時には、Meta側にどのアプリケーションからAPIを使用したいかのレビュー申請を行う必要があるのですが、その申請を行ったアプリ自身として操作ができるようになるアクセストークンです。

アプリの設定情報の変更や、利用状況を取得する時などに使用します。

# その他アクセストークンにまつわる「知っておくと捗る」情報
Metaの開発者アカウントを作ると、Graph APIを使った開発が便利になるさまざまな機能を利用できるようになります！
アクセストークンのデバッグもやりやすくなるので、ぜひ活用してみてください。

※ 開発者アカウント登録にはFacebookアカウントが必要です。詳細は公式ドキュメントをご参照ください。

https://developers.facebook.com/docs/development/register?locale=ja_JP

## 自分の持っているアクセストークンが何者か知る方法
Metaの開発者アカウントを作ると、公式のアクセストークンデバッガーが利用できます。  

アクセストークンを入力すると、「タイプ」の欄からアクセストークンの種類を確認することができます。

https://developers.facebook.com/tools/debug/accesstoken/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490505/d0a7e735-27bf-c9ed-ec72-19c87d6f00a5.png)

## ユーザーアクセストークン・ページアクセストークンの有効期限を長期化する

アクセストークンの有効期限はデフォルトで1時間~2時間ですが、長期トークンの発行をすることができます。  
長期アクセストークンを使ってFacebookのサーバーにリクエストを送る（=Graph APIを利用する）と、1日に1回期限の更新がされるので、利便性が向上します！

※ 利用が全くない状態だと、長期トークンは約60日後に有効期限が切れます。

https://developers.facebook.com/docs/facebook-login/guides/access-tokens/get-long-lived?locale=ja_JP

## グラフAPIエクスプローラで、任意のアクセストークンを使ってAPIの実行テストをしてみる
同じくMetaの開発者アカウントを作ると、グラフAPIエクスプローラを利用できるようになります。

任意のアクセストークンを使ってGraph APIへリクエストを送れるので、コーディングをする前のデバッグに役立ちます！

https://developers.facebook.com/tools/explorer/?locale=ja_JP

## 困った時はコミュニティフォーラムに質問を投げるのも一手
同じくMetaの開発者アカウントを作ると、開発者コミュニティフォーラムを利用できるようになります。
Graph APIを使った開発でつまずいたときに、APIのエラーメッセージや実現したいことで検索すると、過去に同様の事象で困っていた人のやり取りが参照できるので開発時のヒントになるかもしれません。

もし目当ての情報が見つからなければ自分でスレッドを立てることも可能です。

Metaの障害かも？と思った時も、一度覗きに行ってみると情報が得られることもあります！ぜひ活用してみてください。

https://developers.facebook.com/community/?locale=ja_JP

# まとめ
使用したいAPIで、「ユーザー」の操作をしたいのか、「ページ」の操作をしたいのか…など、対象を意識することで、自分たちが作るアプリケーションで必要なアクセストークンの種類が明らかになったり、デバッグもしやすくなると思います。

アクセストークンを適切に、そして安全に使いこなして、楽しいGraphAPIライフを送りましょう！

# SNSのAPIに興味があるエンジニアを求む！
株式会社コムニコは、SNSのプロフェッショナル集団が集まったSNSの総合代理店です。
エンジニアチームでは、X(旧Twitter)やFacebook, Instagramに関する3つのプロダクトの開発を行っています！

- SNSのAPIに興味がある
- 成長フェーズの自社プロダクト開発に興味がある
- 歴史の長い自社プロダクトの開発に興味がある
- フルスタックエンジニアのキャリアを築きたい！
 
そんなエンジニアを大募集しているので、興味のある方はぜひ下記のリンクをポチッとしていただければ幸いです！
カジュアル面談でお会いしましょう🫶

https://hrmos.co/pages/lmg/jobs/1675114439462850596