認証と認可(だれか・してよいか)
よく混ざる 2 つの言葉です。失敗したときの状態コードも違います(Web の仕組み「状態コード」)。似た言葉の違いはセキュリティのタブへ。
空港でたとえると、パスポートで本人を確かめるのが認証、搭乗券でどの便に乗れるかが決まるのが認可です。考え方のヒント
パスワードの保存
パスワードは、データベースが漏れても元に戻されない形で保存します。下ほどよい保存のしかたです。
体験: ソルトの効き目
2 人が同じパスワードを使っているとします。SHA-256 で計算して比べます(本物の保存は Argon2id や bcrypt。ここではソルトの効き目だけを見せています)。
Laravel では
セッションとトークン
ログインしたあと「この人はログイン中」をどう覚えるかには、3 つの形があります。Laravel の画面は Cookie のセッション、API は Sanctum のトークンが基本です。Cookie の仕組みはWeb の仕組みへ。
体験: JWT を分解して読む
作り物の JWT です。ボタンで中身を書き換えると、サーバーの確かめ(本物の HMAC-SHA256 で計算)がどう変わるかが見えます。体験用の鍵は stack-map-demo-secret です。本物の鍵は、決して人に見せません。
トークン(3 つの部分を「.」でつないだ文字列)
①と②は Base64URL で並べただけなので、だれでも元の文字に戻して読めます。署名で分かるのは「書き換えられていないか」だけです。
出典: RFC 7519(JSON Web Token)・RFC 8725・OWASP「JSON Web Token Cheat Sheet」
「Google でログイン」の中身(OAuth 2.0 と OpenID Connect)
アプリは利用者のパスワードを一度も見ずに、「だれか」を知ります。いま勧められている形は「認可コード+PKCE」です(RFC 9700。2025 年 1 月)。番号か「次へ」で 1 歩ずつ進めます。
Laravel では(Socialite)
2 段階認証(多要素認証)とパスキー
種類のちがう 2 つ以上の要素を組み合わせると、パスワードが漏れても入られにくくなります。ただし、方法によってフィッシング(偽のサイト)への強さが大きく違います。
体験: 偽のサイトで試す
認可の形
「してよいか」の決め方には、3 つの考え方があります。実際は組み合わせて使います。
体験: 認可チェッカー
開発部の社員 A が出した「打刻の修正申請」を、だれが何をできるか(作り物の決まり)。マスを押すと、決め手が出ます。
Laravel では(Gate と Policy)
1 つの機能ができるまで「コード」 →セキュリティ「Laravel でよくある穴」 →セキュリティ「ID の書き換え(IDOR)」 →
よくある穴
ログインまわりで、実際によく見つかる穴と守り方です。
ログインまわりのチェックリスト
ログインや権限にかかわる変更を出す前に、確かめたものに印を付けてください(この端末にだけ保存されます)。