前回からの続きです。前回からかなり時間が立っていて若干今更感がありますが。。。申し訳ないです。。。
ということで、今回は③アクセストークンの取得の部分を作ってみようと思います。
アクセストークン、IDトークンを取得
TokenエンドポイントからアクセストークンとIDトークンを取得できます。
https://developer.yahoo.co.jp/yconnect/v2/authorization_code/token.html
前回の「ログイン画面を表示してみた」の後、Yahooのログイン画面でログインをすると、WEBアプリにリダイレクトされます。
その際にGETパラメータで「code(認可コード)」が渡されます。その「code」を使いトークンを取得します。
最低限必要なリクエストパラメータは、「grant_type」「redirect_uri」「code」 のようです。
// Tokenエンドポイントに送信するデータ
$data = [
"grant_type" => "authorization_code",
"redirect_uri" => "http://localhost/y_id_sample",
"code" => $_GET["code"]
];
また、TokenエンドポイントはBasic認証が掛かっています。
Client IDとClient Secretを”:”(コロン)で連結し、Base64エンコードを行って、Authorizationヘッダーで送信する必要があります。
Client IDとClient Secretは、アプリケーションの管理から確認できます。
// 発行されたクライアントID
$client_id = "sample";
$secret = "sample_secret";
// ヘッダー
$header = array(
"Content-Type: application/x-www-form-urlencoded",
"Content-Length: ".strlen($data),
"Authorization: Basic " . base64_encode($client_id . ":" . $secret),
);
上記で記載したリクエストヘッダーとパラメータを送信します。
そうすると、アクセストークンとIDトークンが取得できます。
レスポンスはJSON形式なので、json_decode($tokenApiResponse,true);でデコードしましょう。
// context
$context = array(
"http" => array(
"method" => "POST",
"header" => implode("\r\n", $header),
"content" => $data,
"ignore_errors" => '1'
)
);
// Tokenエンドポイントにリクエストを送信して結果を取得
$token_api_url = $open_id_conf["token_endpoint"];
$tokenApiResponse = file_get_contents($token_api_url, false, stream_context_create($context));
// jsonデコード
$tokenApiResponse = json_decode($tokenApiResponse,true);
if (isset($tokenApiResponse['error'])) {
// エラーの場合は、ログイン画面にリダイレクト
return header("Location: login.php");
}
エラーなく取得できている場合は、以下のパラメターが返ってくるはずです。
- access_token
- token_type
- refresh_token
- expires_in
- id_token
これでアクセストークン、IDトークンの取得は完了です。
次回は④のIDトークンの検証などをやってみようと思います。