同記事では、Google Kubernetes Engine でホストしているWebサイト、Apigee 上の API、Firebase を使用するアプリ等のユーザー認証を使用するサービスの管理者を対象に、アカウント認証システムを安全かつ拡張性があり、実用的なものにするためのベストプラクティス13箇条を紹介している。
1.パスワードをハッシュ化する
・パスワードの平文保存はNG
・Argon2id や Scrypt で作成された暗号として強力な復元できないパスワードハッシュを保存する
・ユーザーがパスワードを入力した直後以外のタイミングでユーザーのパスワードを平文で生成しない
2.可能であれば、サードパーティの ID プロバイダを許可する
・サードパーティの ID プロバイダを許可すると信頼できる外部サービスを利用してユーザーの ID を認証できる(Google、Facebook、Twitter 等)
3.ユーザー ID とユーザーアカウントのコンセプトを分離する
・ユーザーアカウントと認証情報のコンセプトを分離することで、サードパーティの ID プロバイダを実装、ユーザー名の変更許可、複数 ID を単一のユーザーアカウントにリンクするプロセスが大幅に簡素化される
4.単一のユーザーアカウントに複数の ID をリンクできるようにする
・ユーザーにメールアドレス、電話番号、ユーザー名などの一般的な識別情報の入力を求めることで、そのデータがシステム内の既存のユーザーと一致する場合は、既知の ID プロバイダでも認証し、新しい ID を既存のアカウントにリンクするようユーザーに要求する
5.長いパスワードや複雑なパスワードをブロックしない
・ハッシュ化されたパスワードは、すでにサイズの小さい ASCII 文字セットになっている
・ユーザーがパスワードにどんな文字でも使用できるようにすべき
6.ユーザー名に不当なルールを課さない
・ユーザー名に対する制限が厳しいサイトは、開発者にとっては便利で手っ取り早いがユーザーを犠牲にする
7.ユーザーの ID を検証する
・ユーザーに連絡先情報の入力を求める場合は、連絡先情報を間違って入力する可能性を考慮し、できるだけ早く検証する必要がある
8.ユーザーがユーザー名を変更できるようにする
・ユーザー名を変更したいという要望を尊重するために、複数のユーザー名の使用を許可したうえでメインのユーザー名を選択できるようにする
9.ユーザーがアカウントを自分で削除できるようにする
・「閉鎖された」アカウントからデータが漏えいしてデータ侵害が発生した場合には大量の個人情報が流出する
10.セッションの長さを意識的に決定する
・サービスのセッションにしきい値を設けて、その経過後にパスワードや第 2 の要素などのユーザー検証を求めるようにする
・ユーザーセッションが期限切れになったり再認証を要求する場合は、リアルタイムでプロンプトを表示するか最後に認証されてから保存していないアクティビティを保持するメカニズムを提供する
11.2段階認証プロセスを使用する
・時間ベースのワンタイムパスワード、メール確認コード、「マジックリンク」は、ユーザーフレンドリーで比較的安全
・合理的に可能な最も安全な 2FA 認証を提供する
12.ユーザー ID の大文字と小文字を区別しない
・ユーザーはユーザー名の大文字と小文字に注意を払わず、どちらを使用したか正確に覚えていないことがある
13.安全な認証システムを構築する
・パスワード復旧の代わりとなるパスワードの再設定の実装、詳細なアカウントアクティビティのログ記録、クレデンシャル スタッフィングを防ぐためのレート制限ログイン試行、ログイン試行の失敗が多すぎる場合のアカウントのロックアウト、長期間アイドル状態であった認識されていないデバイスまたはアカウントの 2 要素認証プロセスの要求などの実装











![[USBで録画や再生可能]Tinguポータブルテレビ テレビ小型 14.1インチ 高齢者向け 病院使用可能 大画面 大音量 簡単操作 車中泊 車載用バッグ付き 良い画質 HDMI端子搭載 録画機能 YouTube視聴可能 モバイルバッテリーに対応 AC電源・車載電源に対応 スタンド/吊り下げ/車載の3種類設置 リモコン付き 遠距離操作可能 タイムシフト機能付き 底部ボタン 軽量 (14.1インチ)](https://m.media-amazon.com/images/I/51-Yonm5vZL._SL500_.jpg)