AIでアプリをつくる人のための「認証」と「認可」:「ログインできる」と「見ていい」は別の話

•

AIに手伝ってもらいながら、業務用のアプリをつくる。画面ができて、ログイン画面もちゃんとあって、「よし、これで安全」と思う。

私は最初、そう思っていました。でも、あるとき気づいたんです。「ログインできる」ことと「この情報を見ていい」ことは、まったく別の話だということに。

この記事では、その2つの違いを、日常の例えと図で整理します。専門用語は「認証」と「認可」の2つだけ。覚えるのはそこだけで大丈夫です。

まず、ひとことで

  • 認証:あなたは誰?(本人確認)
  • 認可:あなたは何をしていい?(権限の決定)
ビルの受付でたとえた認証と認可

ビルの受付で考えてみる

オフィスビルを想像してください。

① 受付で本人確認(認証) 社員証や顔、パスワードなどで、「この人は確かに◯◯さんだ」と確かめる。確認できたら、入館証をもらえます。

② 入れる場所を決める(認可) 入館証を持っていても、全部の部屋に入れるわけではありません。

  • 1階ロビー:誰でもOK
  • 営業部フロア:営業の人だけ
  • 経理部フロア:経理の人だけ
  • 社長室:社長だけ

「入館証を持っている(認証済み)」ことと、「経理部フロアに入っていい(認可)」ことは、別のルールで決まっています。

アプリも同じです。

アプリで起きること:同じ画面、違う見え方

取引先ごとの請求書を管理するアプリを考えます。A社の経理の人も、B社の経理の人も、同じ画面からログインします。

人によって見えるものが違う
だれ ログイン(認証) 見ていい範囲(認可)
Aliceさん(A社の経理) ○ できた A社の請求書だけ
Bobさん(B社の経理) ○ できた B社の請求書だけ
ログインしていない人 × できない 何も見えない

AliceさんもBobさんも「ログインできる」。でも見ていいのは、自分の会社の分だけ。

もし、認可がうまくできていないと、どうなるでしょう? ログインさえできれば、他社の請求書も見えてしまう。 場合によっては、ログインしていない人にも見えてしまう。

ちょっと怖い話:私が試したときのこと

私は、小さなデモアプリで、わざと「見ていい人のルール」を入れないで試してみました。ログインしていない人の目線で、請求書の一覧を見てみたところ…。

A社の請求書も、B社の請求書も、4件ぜんぶ見えてしまいました。

ログイン画面があっても、その奥のデータの守りがなければ、誰でも見えてしまうことがある。ここは、実際に見て、ヒヤッとしたところです。

そのあと、「自分の会社の分だけ見える」ルールを入れました。同じ操作をもう一度やると、

  • ログインしていない人:0件
  • Aliceさん:A社の2件だけ
  • Bobさん:B社の2件だけ

になりました。同じ質問なのに、人によって答えが変わる。これが、認可の役割です。

さらに、AliceさんがB社の請求書を書き込もうとしたら、きちんと拒否されました。「見る」だけでなく「書く」側も、認可の対象です。

「エラーが出ない」は安全の証拠ではない

もうひとつ、私が勘違いしたことがあります。

AliceさんがB社の請求書を追加しようとしたとき、最初はエラーが出ませんでした。「通っちゃった?」とあわてました。

実際は、「AliceさんにはB社そのものが見えない」ので、「B社の請求書を追加する」という操作が、対象が見つからず、何も起きなかっただけでした。

つまり、エラーが出ない=安全が確かめられた、ではない。見えないものは、「ない」ことになるので、静かに何も起きないことがある。だから、「ちゃんと拒否されるか」を、わざと試してみることが大切だと感じました。

認証と認可、アプリのどこで出会う?

アプリのどこで出会うか

認証(あなたは誰?)に出会う場所 – ログイン画面 – 「Googleでログイン」 – パスワードのリセット – 二段階認証のコード入力 – 「このメールアドレスは確認済みです」

認可(何をしていい?)に出会う場所 – 管理者だけが見る設定画面 – 「閲覧のみ」と「編集できる」の違い – 他社のデータは見えない – 承認ボタンを押せる人は課長以上 – 有料プランだけ使える機能

困りごとが「入れない」なら認証、「見えすぎ・見えない」なら認可、であることが多いです。AIに相談するときも、この区別をしておくと、話が早くなります。

「お客さまごとにデータを分ける」2つの考え方

お客さまが増えると、「データをどう分けるか」を考えることになります。大きく2つあります。

マンションと一戸建て

A. 1つの建物に、部屋ごとの鍵(マンション型) – 管理は1か所。更新も1回で済む – ただし、「どの鍵で、どの部屋に入れるか」のルールを、きちんと設計する必要がある – ルールの書き間違いがあると、他の部屋が見えてしまう

B. お客さまごとに、別の建物(一戸建て型) – 完全に別々なので、とても安全 – ただし、建物の数だけ、管理・更新・お金がかかる

私は両方、小さく試してみました。Bは、実際にお客さま用の「別の建物」を1つ増やしてみて、作業が建物の数だけ増える感覚をつかみました。一方でAは、ルールを一度ちゃんと書けば、お客さまが増えても同じ建物で済む。ただし、そのルールが本当に効いているかは、自分で確かめる必要がありました。

どちらが正解ではなく、お客さまの数・求められる安全度・運用できる人数で決まります。たとえば、

  • お客さまが多くて、機能は共通 → マンション型が向きそう
  • 数は少ないけれど、契約で「完全に別」が必須の大口 → 一戸建て型が向きそう

AIに頼むときの言葉

AIアシスタントと一緒にアプリをつくるとき、こんな聞き方ができます。

  • 「ログインしているユーザーごとに、見られるデータを分けたい。そのルールを作ってほしい」
  • 「ログインしていない人が、データを見られないか確認してほしい」
  • 「A社の人がB社のデータを書き込もうとしたら、拒否されるか試してほしい」
  • 「お客さまは何社くらいになりそう? マンション型と一戸建て型、どちらが向いている?」

ポイントは、「認証」と「認可」を別々に確認してもらうこと。「ログインできた」だけで終わらせず、「ログインした後、何が見える?」まで確認することです。

私が確かめられていないこと

正直に書いておきます。

  • 実際のアプリ(ブラウザ)からログインして確かめたわけではなく、ログイン済みの状態を再現して確認しました
  • お客さまが何百社・何千社になったときの、速度や運用の負担
  • 一戸建て型の、データの移行や日々の運用の大変さ(数を増やしてみただけで、運用は測っていません)
  • 「管理者」「閲覧のみ」など、より細かい役割分担

まとめ

  • 認証=あなたは誰?(本人確認)、認可=何をしていい?(権限)
  • 「ログインできる」と「見ていい」は別の話
  • 認可がないと、ログインしていない人にも見えてしまうことがある
  • 「エラーが出ない」は「安全」とは限らない。わざと拒否されるか試す
  • お客さまごとのデータの分け方には、マンション型と一戸建て型がある。どちらが正解かは、状況しだい

「ログイン画面があるから大丈夫」と思ったとき、一度だけ、「ログインした後、誰に何が見える?」と聞いてみてください。それだけで、見落としはぐっと減ると思います。

もっと詳しく知りたい方へ(技術編・Qiita)

実際に手を動かした記録を、Qiitaに書きました。

  • 実際に動くWebアプリにしてみた記事: Qiita
  • 手順編(画面操作の記録): Qiita

  • サンプルコード: GitHub

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *