会員登録すると
学習することができます。
会員登録する(無料)
登録済みの方はこちら
ログイン

認証と認可を分けて設計する ― 「誰か」と「何をしてよいか」は別の問い

目安学習時間 13分

課題

全問正解でレクチャー完了です。

【問題1】

「この会員は、この応募データを見てよいか」を確かめることは、認証と認可のどちらに当たりますか。

[選択肢]

【問題2】

管理者を「会員の表に、管理者かどうかの印を1つ足す」形で作ったとき、後から困ることとしてこの講座が挙げているものはどれですか。

[選択肢]
会員登録すると
学習することができます。
会員登録する(無料)

学ぶ目的

2つの問いを分ける

ログインまわりの設計は、次の2つの問いに分けて考えます。

問い 呼び方 例
あなたは誰か 認証(Authentication) メールアドレスとパスワードでログインする
その人は、これをしてよいか 認可(Authorization) この応募を見てよいか、この求人を消してよいか

講座31の第3回では、認可の書き忘れ(URLのIDを書き換えると他人のデータが見える)を見ました。この講座では一歩手前に戻って、最初にどう決めておくと、後から困らないかを扱います。

入ってくる「主体」を先に数える

「ログインする人」は1種類とは限りません。まず、システムに入ってくる主体(だれが・何が)を数えます。naminori なら、次のようになります。

主体 例
会員 求人に応募する人、講座を受ける人
企業の担当者 会員のうち、企業の求人や応募を扱う役割を持つ人
管理者 naminori を運営する人
外部のアプリ 会員や管理者の代わりにデータを読む AI アプリ(第5回)

naminori では、会員と管理者をログインの仕組みごと分けています。会員としてログインしても、管理画面には入れません。さらに、管理者だけは一定時間操作が無いと自動でログアウトし、会員はログインしたままにできます。

後から困ること①「ログインしていれば全部できる」

最初は利用者が1種類なので、「ログインしているか」だけ確かめて作りがちです。

半年後、「企業の担当者にも画面を開けたい」「閲覧だけのスタッフを入れたい」と言われます。ところが、どの画面が誰向けなのか、コードのどこにも書かれていません。結局、全画面を1つずつ読み直して判定を足すことになります。読み漏らした画面は、誰でも使える穴として残ります。

後から困ること② 管理者を「会員の1人」にする

会員の表に「管理者かどうか」の印を1つ足すだけなら、すぐ作れます。でも、会員向けの仕組み(ログインしたままにする、パスワードを再設定する、外部サービスでログインする)が、そのまま管理者にも効いてしまいます。

「管理者だけ短い時間で自動ログアウトさせたい」「管理者だけ多要素認証を必須にしたい」と思ったときに、会員と切り分けられません。強さを変えたい主体は、最初から分けておきます。

最初に書いておく表

設計の最初に、「主体 × 入口 × できること」の表を1枚書きます。入口とは、ログイン画面・API・外部アプリの接続など、主体が入ってくる経路のことです。この表があれば、主体や入口が増えたときに、どこを直せばよいかが分かります。

このレクチャーで学ぶこと

  • 認証と認可の違い
  • 入ってくる主体を数える(naminori の例)
  • 「ログイン済みなら全部OK」で作ると後から困ること
  • 管理者を会員の1人にすると後から困ること

質問

まだ質問は投稿されていません。

質問投稿

ログイン後に質問の投稿ができます。