質問: PHP言語でRestfulなAPIの作成を学んでいます。 フレームワークはLaravel5.3を使用しています。 ユーザー認証のやり方ですが、FacebookのログインAPIのように、 トークンを発行してユーザーに持たせることで認証を行おうと思っています。 トークンを発行する際、有効期限をもたせた方がセキュリティ的にいいと思うのですが、 有効期限の情報はAPIを使用する側に渡すべきでしょうか? それともトークンのみ渡して、データベースにアクセスする操作の際に1回1回トークンを受け取ってデータベースを参照し、有効期限を確認すべきでしょうか? ご教授いただけますと幸いです。 トークン情報のデータベースの構造は以下の通りです。 | userid | token | timestamp | limit | | --- | --- | --- | --- | | ユーザーのID | 乱数で生成されたトークン | トークン発行時のタイムスタンプ | いつまでトークンが有効かのタイムスタンプ | 認証的に甘いところがありましたらご指摘いただけると幸いです。
回答: 渡さないべきかと存じます。 仮に渡したとしてもAPI側は必ず、受け取ったトークンの有効期限をデータベースから確認すべきと存じます。 (クライアントから渡される有効期限は改ざんされている可能性があり信用出来ないため) APIを利用する側としても有効期限を気にした実装はせず、 トークンが必要なAPIから、トークンの有効期限が切れている旨のレスポンスが返却されれば、トークンを再取得し、再リクエストするのが一般的かと存じます。