Snackgirls コーディングノート · 05
ログインしたのに、友達の記録は編集できない?
キラリのアカウントとネアのゲーム記録で、認証と認可の違いを見てみます。
ログインすれば何でも変えられると思っていたけれど
こんにちは、レッドです。今回は「プレイノート」で友達の記録も読めるようにすると想像してみました。ただし、編集できるのは書いた本人だけ、というルールを決めました。
キラリが自分のアカウントでログインして、ネアの記録を開きました。文章は読めるのに、編集はできませんでした。
私、ログインしてるよ? どうして編集できないんだろう?
ネアが、画面に開かれた自分の記録を指しました。ログインした人と、その文章を書いた人は別でした。
キラリのログインと、ネアの記録

ここでは友達の記録を読むことは許可し、編集はできないようにしています。読む権限も制限するサービスはあります。何を許可するかは、機能ごとに決める必要があります。
似ているけれど、役割の違う二つの言葉
認証:誰なのかを確認すること
認証は、「今リクエストしている人は誰か」を確認することです。パスワードなどでアカウントにログインするのが、代表的な例です。
認可:その操作をしてよいか確認すること
認可は、「この人に、その操作をする権限があるか」を確認することです。ログインしたキラリにも、ネアの記録を編集する権限はありません。このサイトでは、自分の文章を編集できるのは作成者だけ、と決めたからです。
認証は「誰なのか」。
認可は「その操作をしてよいか」。
そっか、ログインは私だって確認すること。この文章を変えていいかは、また別に見るんだね。
ボタンを隠せば十分?
権限のない人に編集ボタンを見せないと、操作しやすい画面になります。でも、それだけではデータを守れません。Web画面を通らず、サーバーにリクエストを送れる道具もあるからです。
だからサーバーは、リクエストを受けるたびにログイン状態と操作の権限を確認します。「自分の記録」のように持ち主が決まっていて、その操作に所有者の権限が必要なら、本当にその利用者の記録かどうかも確認します。
APIとcurlって何?
APIは、プログラム同士がリクエストとレスポンスをやり取りするための使い方や約束です。curlは、Web画面をクリックしなくてもリクエストを送れる道具です。
ここで覚えたいのはコマンドではなく、「画面のボタンだけがリクエストの入り口ではない」ということです。データを扱うサーバー側でも、許可するか確認する必要があります。
セッションCookieも、確認せずに信用しない
Webでは、ログイン状態を維持するためにセッションCookieを使うことがあります。ブラウザーがログイン状態の確認に必要な情報をサーバーへ渡す方法の一つです。ブラウザーが保管し、リクエストと一緒に送る小さなデータと考えてください。
Cookieがあるだけで通してはいけません。サーバーは、有効なログインセッションを示しているか、期限が切れていないかを確認します。誰かを確認したあとも、操作の権限は別に調べます。
ログインしたのに、なぜ入れない?
下の動画では、一般ユーザーがログインしても管理者用の部屋には入れません。ログインと権限を別々に確認する理由を見てみましょう。
元の動画 · 音声は韓国語です。
ログインの次は、操作の権限を確認
キラリとしてログインしたことと、ネアの記録を編集できることは別の問題でした。この例では友達の記録は読めますが、編集は作成者だけができます。サーバーもリクエストごとに、そのルールを確認します。
ログイン機能があるかだけじゃなくて、誰の記録を変えられるかも聞いてみよう。
記録ページを作るときは、読む権限と編集する権限を分けて書こうと思います。そうすれば、画面とサーバーで何を確認するかも決められそうです。
小さな練習 · 3問
ログインした人と、記録の持ち主を分けてみよう
「作成者だけが編集できる」というルールで、認証と認可を区別してください。解答例は考えてから開いてみましょう。
1. 認証と認可を結ぼう
「キラリのアカウントか確認する」と「ネアの記録を編集してよいか確認する」を、認証・認可と結んでください。
解答例を開く
アカウントの本人確認が認証、その記録を編集する権限の確認が認可です。
2. 誰が編集できる?
作成者だけが編集できるサイトです。レッドでログインしたとき、レッドとネアのメモのどちらを編集できるべきでしょう?
解答例を開く
レッドのメモだけです。サーバーで、ログイン中の利用者と記録の作成者を確認します。
3. 画面だけ見れば十分?
他の人の記録では編集ボタンを隠しました。それでもサーバーで確認すべき二つのことを書いてください。
解答例を開く
ログイン状態と、その記録を編集する権限です。画面のボタンを使わないリクエストもあります。

コメント
0ログイン不要。投稿したブラウザから編集・削除できます。
すべてのコメント 0
한국어 · English · 日本語まだコメントはありません。最初のひとことをどうぞ。