バックエンド・API・データ · 中級
認証と認可:あなたが誰で何が許可されているか
一行でいうと: アイデンティティと認可は二つの別々の質問であり、ほとんどの違反はインターフェースでチェックされ、サーバーでチェックされないことから来る。
分離
認証はユーザーが誰かに答える。認可はリソースに対してアクションを実行する権限があるかに答える。インターフェースでボタンを隠すことは認可ではない——どのリクエストも直接送れる。
ルール:すべてのルートはユーザーがログインしているだけでなく、特定のリソースに対して認可をチェックする。
実践的なモデル
ロールによって——シンプルで、ほとんどのシステムに十分。所有権と帰属によって——ユーザーが自分の組織のデータのみ見るとき必要。詳細なポリシーによって——強力でメンテナンスコストが高い、本当に必要なときのみ。
シンプルに始めて、コードの一箇所にルールを文書化する、二十のチェックに散らばせるのではなく。
トークン
アクセストークンの短い有効期限、取り消せるリフレッシュトークン、ログアウトイベントの拒否リスト。アクセスを即時に取り消せるだけのものをサーバー側に保持する——ちょうど構築する時間がない日に必要になる能力だ。
さらに深く
最も一般的な危険は識別子によるリソースへの直接アクセスだ:別のユーザーのデータを返すアドレスの数値を交換する。識別子を受け取るすべてのルートで体系的にこれをチェックし、ユーザー間でアクセスを試みる自動テストを追加する。