PHPにおける認証付きAPI

APIを公開ではなく、パスワードによってのみ アクセス可能な非公開にすることができます。 この場合、APIにリクエストする際には、 パラメータに加えて正しいパスワードを 渡す必要があります。 このようなパスワードはトークンと呼ばれます。

当APIのユーザーは、何らかの方法でこの トークンを入手する必要があります。 例えば、購入するなどです。この場合、 購入者それぞれが独自のトークンを持つことになります。

例を用いてトークンの取り扱いを見てみましょう。 当APIがパラメータとして数値を受け取り、 その数値の二乗を返すとします。 このAPIを非公開にしてみましょう。 実装に取り掛かりましょう。

まずは簡単のため、共通のトークンを一つ作成し、 それをファイルに平文で保存しましょう:

api.loc/index.php<?php
  $token = '12345';
?>

パラメータとトークンを渡して、このように 当APIにリクエストを送ります:

urlhttp://api.loc/index.php?num=100&token=12345

トークンのチェックを行うAPIを実装しましょう:

api.loc/index.php<?php
  $token = '12345';
  
  if (isset($_GET['token']) and $_GET['token'] === $token) {
    if (isset($_GET['num'])) {
      echo $_GET['num'] ** 2;
    } else {
      echo 'error';
    }
  } else {
    echo 'incorrect token';
  }
  
?>
Задание 1

誕生日の日付をパラメータとして受け取り、 その日付までの残り日数を返すAPIを作成してください。 トークンによる認証を実装してください。

Задание 2

前の課題を、パラメータとトークンの両方を POSTメソッドで渡すように変更してください。

Задание 3

前の課題を、トークンがHTTPヘッダー X-Tokenを介して渡されるように変更してください。

Задание 4

トークンがデータベースに保存され、 APIの各ユーザーが独自のトークンを 持つようにしてください。

Задание 5

APIの各ユーザーに対して、1日あたりの リクエスト回数を10回に制限してください。