認証とは何か
認証(authentication)は、利用者やシステムが名乗っている本人・本物であることを、認証情報を使って確かめる処理です。ログイン画面は代表例ですが、認証は画面の名前ではなく「誰または何からの操作かを確かめること」を指します。
パスワードだけでなく、パスキー、セキュリティキー、認証アプリのコードなども認証に使われます。
一文でいうと
認証とは、「あなたは誰か」という申告を、信頼できる手段で確認することです。
OWASPは認証を、個人、組織、Webサイトなどが主張どおりの存在かを、パスワードやセキュリティトークンなど一つ以上の認証手段で検証する処理と説明しています。
個人開発のどこで登場するか
利用者ごとのデータを保存する、管理画面を開く、購入履歴を表示する、外部サービスへ接続するといった場面で登場します。全員が同じ公開情報を見るだけなら、利用者アカウントを作らない選択肢もあります。
認証を追加すると、ログインだけでなく次の運用が必要になります。
アカウントの作成と停止
認証情報の安全な保存
ログイン状態の維持と終了
認証情報を失った場合の回復
不正な試行の検知と制限
重要操作の前に再確認する仕組み
必要性が曖昧なまま認証を付けると、利用者の負担と守るべき情報だけが増えます。
ログインしてからデータを開く例
読書記録アプリで自分の本棚を開く流れを考えます。
利用者がメールアドレスなどの識別子と認証手段を提示する
サーバーが認証手段を検証する
成功した利用者についてログイン状態を表すセッションを作る
後の要求で、そのセッションが有効か確かめる
本人に許可された本棚だけを返す
最初の検証に成功しても、その後の要求が誰のものか安全に結び付けられなければ、ログイン機能は成立しません。
認可、アカウント、セッションと区別する
アカウント:サービス内で利用者を識別し、設定やデータを結び付ける記録
認証:名乗った本人・本物かを確かめる処理
認可:認証後を含め、その主体に特定の閲覧や操作を許可する判断
セッション:複数の要求にわたり、認証済みの状態などを結び付ける仕組み
ログインできた利用者が、ほかの利用者のデータを見てよいことにはなりません。OWASPも、認証と認可を別の処理として扱い、要求ごとに権限を確認する重要性を示しています。
自作する範囲を先に狭める
認証は、画面を一枚作れば終わる機能ではありません。パスワードを平文で保存せず、通信をHTTPSとは何かで保護し、回復、失効、再認証、監視まで設計します。
最初の個人開発では、実績のある認証ライブラリや管理サービスを使い、独自に実装する範囲を小さくする方法があります。採用時は次を確認します。
自分のアプリが保持する認証情報は何か
退会、メール変更、端末紛失時に何を無効化するか
管理者と一般利用者の権限が分かれているか
ログへパスワードやトークンを出していないか
提供元を変更するときに利用者データを移せるか
認証情報はシークレットとは何かとして扱い、漏えい時は削除だけでなく失効させます。
次に読む記事
認証情報の保管と失効は個人開発の秘密情報を安全に管理するで具体化できます。認証を含む公開前の確認は公開前チェックリストへ進みます。