そもそもログインとは?
ログインは「あなたが本当にそのアカウントの持ち主かどうか」をサーバーが確認する仕組みです。一般的にはユーザーID(メールアドレス)とパスワードの2つを使いますが、最近は指紋・顔認証・スマホへのコード送信など、追加で確認する方式(多要素認証)も広く使われています。
ログインの基本フロー
仕組み:パスワードはそのまま保存しない
大事なポイントは「サーバーはパスワードそのものを保存していない」ことです。ユーザー登録のとき、パスワードを「ハッシュ化」と呼ばれる一方向の変換にかけて、ぐちゃぐちゃの文字列に変えてからデータベースに保存します。ログイン時は、入力されたパスワードをまた同じ方法でハッシュ化し、保存してあるハッシュと一致するか比較します。
もしDBが流出しても、ハッシュからは元のパスワードに戻せないため、被害が小さくなります。ただし弱いパスワード(123456など)はハッシュからでも逆算されやすいので、長くて複雑なパスワードが必要なのはこのためです。
セッションとトークン
ログイン成功後、毎回ID・パスワードを送らないために「セッションID」または「トークン」と呼ばれる合言葉が発行されます。これがブラウザのCookieに保存され、以降のリクエストに自動で付いていくことで、サーバーは「このリクエストはAさんからだ」と判断できます。
ここで大事なのは、セッションIDやトークンは「一時的な通行証」だということです。ログアウトしたとき、一定時間操作しなかったとき、パスワードを変更したときには、古い通行証を無効にする設計が必要です。共有パソコンでログアウトを忘れると危ないのは、この通行証がブラウザに残る場合があるからです。
おすすめの学び方
「自分でログイン画面を作れるとWeb開発のレベルが一気に上がる」と覚えておきましょう。Pythonの Flask + Werkzeug、Node.jsの Express + bcrypt あたりが入門に向いています。最初は「メアドとパスワードで登録→ログイン→マイページ表示」の最小機能だけ作るのが目標です。
ただし、練習用のログイン機能をそのまま公開サービスに使うのは危険です。実際のサービスでは、ログイン失敗回数の制限、パスワード再設定メールの有効期限、CSRF対策、CookieのSecure属性やHttpOnly属性など、細かい安全策が必要になります。最初は「仕組みを理解するためのミニアプリ」と割り切り、本番ではフレームワークや認証サービスの標準機能を使うのが現実的です。
気をつけたい落とし穴
- パスワードをそのままDBに保存する。必ずハッシュ化(bcryptやArgon2など)する
- HTTPSを使わない。通信が盗み見られるとパスワードが丸見えになる
- パスワードを忘れたとき「メールに元のパスワードを送る」設計にする。これは保存方法が間違っている証拠
将来どう役立つ?
ログイン機能を「正しく」理解していると、Webアプリを作るときだけでなく、自分のアカウントを守る判断にも役立ちます。最近はパスキー(指紋・顔認証ベース)の利用も広がっており、パスワードだけに頼らない認証が少しずつ増えています。古い知識に固定せず、パスワード、2要素認証、パスキーの違いを説明できるようになると、セキュリティ分野にも進みやすくなります。
今日からできること
- 自分のSNSアカウントで2要素認証をオンにする(最初の実体験)
- 「パスワード ハッシュ化 bcrypt 入門」で検索して仕組みを5分読む
- 慣れてきたら、PythonかNode.jsで「メアド登録→ログイン→ログアウト」を写経してみる
まとめ
確認 パスワードを保存する基本は?