ネットサービスとかGoogleとか豆知識とか。

Index > API > OAuth認証でGitHub APIのアクセストークンを取得する
API
2012年09月05日 14:41

OAuth認証でGitHub APIのアクセストークンを取得する

  • このエントリーをはてなブックマークに追加
  • ... PV
スポンサード リンク

ここでは GitHub API を使う準備段階として、アプリケーション登録をして自分のアクセストークンを取得するまでを簡単に説明します。

まず開発するアプリケーション情報を登録します。

githubapi01.jpg

  • Applications の画面を開いて Developer Applications のほうにある「Register new application」をクリック。
  • Application Name, Main URL, Callback URL を入力。
  • Client ID と Client Secret が発行される。

あとはよくあるOAuth 2.0の認証フローに従ってコードを組めばアクセストークンを取得できます。ドットインストールのレッスンでは「FacebookでログインするWebサービスの基礎」とか「InstagramでログインするWebサービスの基礎」あたりです。

とりあえずざっとPHP用のコードを載せておきます。

<?php

define('CLIENT_ID', '上記で取得したClient ID');
define('CLIENT_SECRET', '上記で取得したClient Secret');

if (empty($_GET['code'])) {
    // Authrize URLの構築
    $params = array(
                    'client_id' => CLIENT_ID,
                    'scope' => 'repo',  // 必須ではない。下記説明参照。
                    );
    $authorizeUrl = 'https://github.com/login/oauth/authorize?'
                 . http_build_query($params);

    header('Location: ' . $authorizeUrl);
} else {
    // アクセストークン取得
    $accessTokenUrl = 'https://github.com/login/oauth/access_token';

    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $accessTokenUrl);
    curl_setopt($curl, CURLOPT_POST, 1);
    $params = array(
                    'client_id' => CLIENT_ID,
                    'client_secret' => CLIENT_SECRET,
                    'code' => $_GET['code'],
                    );
    curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($params));
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    
    $res = curl_exec($curl);
    curl_close($curl);
    echo $res;
}

こんな感じのコードを適当にサーバーに置いてブラウザからアクセスします。そうすると以下のようなAuthorize画面が表示されるので、「Allow」をクリックすればアクセストークンを取得できます。

githubapi02.jpg

最初のパラメータについてだけ説明しておくと、

  • 必須なのは client_id のみ。
  • scope は public なデータを GET するだけなら不要だが、データの POST とか非公開リポジトリ下へのアクセスとかをしたければ必須。その値についてはドキュメントを参照のこと。
  • redirect_uri を指定可能。指定しない場合は、アプリケーション登録時に Callback URL に指定したURLが使われる。
  • CSRF対策のために state をつけることも可。

といった感じ。

リダイレクト先のURLは外部からたどり着けなくてもよいので、もし自分のアクセストークンを取得したいだけであれば、ローカルの開発環境にファイルを置いても構いません。