TOTP(Time-based One-Time Password:時刻ベースのワンタイムパスワード)は、 認証アプリに表示される6桁のワンタイムコードでログインする仕組みです。実際に登録して体験できる学習用デモです。 テスト用環境のため、個人情報などのデータは一切保持されません。
TOTP は公開標準(RFC 6238)のため、特定ベンダーのアプリに縛られません。 Google Authenticator / Microsoft Authenticator / Authy / 1Password / Bitwarden / iPhoneの「パスワード」アプリなど、TOTP 対応のアプリならどれでも同じように動きます。 QRコードもこのサーバー内で生成しており、外部サービスには依存していません。
サーバーが生成したシークレット(QRコード)を認証アプリに取り込み、 アプリが表示した6桁コードを入力して登録を確定します。 コードが一致すれば、アプリとサーバーが同じシークレットを共有できた証明になります。 登録済みのユーザー名は上書きできません。認証アプリの追加はログイン後のページから行います。
ユーザー名と、認証アプリがいま表示している6桁コードを入力します。 サーバーは保存済みのシークレットと現在時刻から同じ計算を行い、 コードが一致するかだけを確かめます。アプリとサーバーの間に通信はありません。
6桁コードは「共有シークレット」と「現在時刻(30秒単位)」から HMAC-SHA1 で計算されます。同じ材料を持つアプリとサーバーは、 通信せずに同じコードへ到達します。30秒ごとにコードが変わるのは、 時刻の側が30秒単位で進むためです。
ログイン後のページは、フロントエンドの切り替えではなく、サーバー側でアクセス権限を判定しています。 未ログインのまま直接開こうとすると、自動的にこのページへリダイレクトされます。
ログイン後のページを直接開く