0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

#7|「ログインできたからって何でも触れたらまずいじゃん」で、認証より面倒な認可の沼に入った 〜管理者か一般かでは足りず、「誰が・誰に・何をできるか」まで判定することになった〜

0
Last updated at Posted at 2026-09-04

C6DDC321-BCEE-4131-934D-1B8B947B4110.png

会社ごとの設定を増やしていくと、当然、次の疑問が出ました。

私「これ、誰でも変更できたらまずいじゃん。」

A「ようやくそこ来たか。」

私「何が?」

A「権限。」

私「ログインしてるかどうかとは違うの?」

A「違う。」

B「ログインしている本人が誰なのか確認するのが認証(Authentication)。その人が何をしてよいか判断するのが認可(Authorization)ですね。」

私「当時はそんな区別知らないよ。『ログインできても、何でも触れたらダメでしょ』くらい。」

最初は、単純に考えていました。

管理者。

一般ユーザー。

私「管理者だけ設定変えられればいいじゃん。」

A「最初はね。」

私「その言い方やめろ(笑)」

例えば、会社設定。マスタ設定。利用者管理。

一般ユーザーには触らせない。管理者だけが操作できる。

ここまでは分かりやすい。
IMG_2349.jpeg

でも、実際の機能を見ていくと、それだけでは足りませんでした。

私「例えば予約って、一般ユーザーでもするじゃん。」

A「する。」

私「でも他人の予約まで勝手に消せたらダメじゃん。」

A「そう。」

私「自分の予約なら変更できる。でも他人の予約はできない。」

B「役割だけではなく、対象データとの関係まで見始めたわけですね。」

さらに、物件。

私「現場担当者なら、自分の担当現場についてはできること増やしたい場合あるじゃん。」

A「全社管理者じゃなくても?」

私「そう。」

A「じゃあ『管理者/一般』だけじゃ足りない。」

私「足りなかった。」

ここで、権限が単純な二択ではなくなりました。

誰が。

誰に。

何を。

どの範囲でできるのか。

B「Role-Based Access Control(RBAC)だけでなく、対象や関係性を含めた認可判定が必要になりますね。」

私「また名前あるの?」

A「あるよ(笑)」

そして、組織を複雑にしたツケも来ました。

A「第4弾で複数所属とか会社またぎまで作ったツケが来た(笑)」

私「大将、ツケ払いに来たよ!」

A「ツケが溜まりすぎて、店(システム)が傾きかけてんだよ!(笑)」

例えば、一人の人が複数部署に所属している。

別会社へ出向している。

グループ会社とも関係している。

私「この人、どこの権限で今操作してるの?ってなる。」

A「ほら(笑)」

B「所属情報が複数あるなら、認可時にどの所属コンテキストで操作しているのかも重要になります。」

私「一人に権限一個付ければ終わりじゃないんだよね。」

A「第4弾で自分から一人を複数にしたからね。」

私「あの時は便利だと思ったんだよ(笑)」

さらに、会社をまたぐなら、もっと怖いことがあります。

私「A社の人が、B社のデータ見えたらまずいじゃん。」

A「それはかなりまずい。」

B「テナント分離ですね。会社ごとのデータ境界を越えさせない。」

私「画面でB社を選べないようにすればいい?」

A「ダメ。」

私「なんで?」

A「画面にボタンがなくても、裏のAPIを直接叩けたら?」

私「……ああ。」

B「UIで非表示にすることと、認可することは別です。」

私「画面で触れなくても、裏から触れたら意味ないじゃん。」

A「そう。それ。」

だから、画面側だけではなく、サーバー側でも権限を確認する必要がありました。

誰がログインしているか。

その人は、どの会社に所属しているか。

どの対象を操作しようとしているか。

その操作を許可されているか。

B「サーバー側で認可判定を行う、Server-Side Authorizationですね。」

私「画面を信用しないってこと?」

A「そう。画面は操作しやすくするためのもの。最後に守るのはサーバー。」

そして、管理者にも種類が必要になりました。

私「会社全体を管理する人と、一部だけ管理する人って違うじゃん。」

A「また増やす?」

私「でも全部同じ管理者にしたら、権限強すぎる場合あるでしょ。」

B「最小権限の原則(Principle of Least Privilege)ですね。必要な操作だけ許可する。」

私「俺は『必要ないところまで触れなくていいじゃん』だけ。」

A「また技術名が後から追いかけてきた(笑)」

権限を細かくすると、今度は変更そのものも怖くなります。

例えば、管理者が自分自身の権限を変更する。

私「自分で自分を何もできない状態にしたら?」

A「管理者いなくなる可能性あるね。」

私「最後の管理者だったら?」

A「会社詰む(笑)」

B「権限管理では、自己変更や最後の管理者保護も重要な論点になります。」

私「権限を変更できる権限って、考え始めると面倒だな。」

A「認可が面倒って言っただろ(笑)」

A「整理するよ。」

私「はい。」

私「ログインしてる人が誰か確認する。」

B「認証。」

私「その人が何をしていいか決める。」

B「認可。」

私「管理者か一般かだけじゃなく、対象との関係も見る。」

B「RBAC+対象・関係性による認可。」

私「複数所属なら、どの立場で操作してるかも見る。」

B「所属コンテキスト。」

私「別会社のデータを触らせない。」

B「テナント分離。」

私「画面で隠すだけじゃなく、裏でも止める。」

B「サーバーサイド認可。」

私「必要以上の権限を持たせない。」

B「最小権限の原則。」

A「『ログインできたからって何でも触れたらまずいじゃん』から、ここまで来た。」

私「でも全部、その一言の延長じゃない?」

A「使う側から見ればな(笑)」

そして、権限まで入れて安心した頃、もっと嫌なことに気づきました。

画面に、在庫が「残り1個」と表示されている。

二人が、ほぼ同時にその画面を見ている。

私「二人とも『1個ある』って見えてるじゃん。」

A「うん。」

私「二人とも同時に取ったら?」

A「……。」

私「2個出ていかない?」

A「やっと来たか。」

次回

画面には、「残り1個」と表示されている。

二人とも、その同じ画面を見ている。

どちらから見ても、まだ在庫はある。

だったら、先に押した方だけ成立させればいい。

最初は、それくらいの話だと思っていました。

――二人がほぼ同時に押すまでは。

連載公開分(クリックで開く)
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?