Delphi TOTP 二要素認証
Google Authenticator、Microsoft Authenticator、Authy が生成する6桁のコードで、どんなログインにも第二の認証要素を追加できます。シークレットを作成してQRコードとして表示し、サーバー側でコードを検証します。
Google Authenticator、Microsoft Authenticator、Authy が生成する6桁のコードで、どんなログインにも第二の認証要素を追加できます。シークレットを作成してQRコードとして表示し、サーバー側でコードを検証します。
時間ベース(RFC 6238)およびカウンターベース(RFC 4226)のワンタイムパスワードを実装する非表示コンポーネントです。接続を一切開かないため、ログインフォーム、REST API、WebSocket サーバーのいずれでも同じように使用できます。
TsgcTOTPAuthenticator(ユニット sgcAuth_TOTP)
Windows, macOS, Linux, iOS, Android
Enterprise および All-Access、加えて sgcAuth パックでも利用できます。sgcWebSockets .NET でも利用可能です。
ユーザーごとに一度 GenerateSecret を呼び出し、GetProvisioningURI を QR コードとして表示してシークレットを保存し、ログイン時に入力されたコードを VerifyCode で確認します。
uses
sgcAuth_TOTP;
var
TOTP: TsgcTOTPAuthenticator;
vSecret, vURI: string;
begin
TOTP := TsgcTOTPAuthenticator.Create(nil);
TOTP.Issuer := 'Example App';
// 登録:新しい Base32 シークレットと QR コード用の otpauth:// URI
vSecret := TOTP.GenerateSecret;
vURI := TOTP.GetProvisioningURI('alice@example.com', vSecret);
// vSecret をユーザーレコードとともに保存し、vURI を QR コードとして描画します
// ログイン時:ユーザーが入力したコードを確認します
if TOTP.VerifyCode(vSecret, edtCode.Text) then
ShowMessage('Code accepted');
// 端末を紛失した場合に備えたワンタイムリカバリーコード
TOTP.GenerateRecoveryCodes(memoRecovery.Lines, 10);
end;
// uses: sgcAuth_TOTP
TsgcTOTPAuthenticator *TOTP = new TsgcTOTPAuthenticator(this);
TOTP->Issuer = "Example App";
String Secret = TOTP->GenerateSecret();
String URI = TOTP->GetProvisioningURI("alice@example.com", Secret);
if (TOTP->VerifyCode(Secret, edtCode->Text))
ShowMessage("Code accepted");
TOTP->GenerateRecoveryCodes(memoRecovery->Lines, 10);
最初のQRコード発行から端末紛失時の復旧まで、第二要素に必要なすべてを備えています。シークレットの保存方法はご自由に設計いただけます。
GenerateSecret は SecretLength バイト(既定は20)のランダムな Base32 シークレットを返します。GetProvisioningURI は Issuer、Algorithm、Digits、Period を含む otpauth://totp/ URI を生成し、そのままQRコードとして描画できます。
VerifyCode は現在のタイムステップに加えて前後 Window ステップ(既定は1)を受け入れるため、端末の時計が数秒ずれていてもログインできます。
aLastTimeStep を伴う VerifyCode のオーバーロードは、前回使用したステップより後のタイムステップのみを受け入れ、一致したステップを返すため、同じコードが二度使われることはありません。
GenerateHOTP と VerifyHOTP はハードウェアトークン向けのカウンターベース方式を実装しており、検証成功時にカウンターを再同期する先読みウィンドウを備えています。
GenerateRecoveryCodes は任意の TStrings に一意なワンタイムコードを書き込みます。認証アプリの入った端末を紛失したユーザーのための予備手段です。
Algorithm で HMAC-SHA1(すべてのアプリが対応する既定値)、HMAC-SHA256、HMAC-SHA512 を選択でき、コードは6〜8 Digits、任意の Period に対応します。
このコンポーネントが実装する標準規格の公式ソースです。
コンポーネントリファレンスへの直接リンク、すぐに実行できるデモプロジェクトの入手、体験版のダウンロードができます。
| オンラインヘルプ — TsgcTOTPAuthenticator このコンポーネントのプロパティ、メソッド、イベントの完全なリファレンスです。 | 開く | |
| デモプロジェクト — Demos\26.Authentication\02.TOTP QRコードによる登録、リアルタイムのコード生成、リプレイ対策付き検証、リカバリーコードを収録しています。sgcWebSockets パッケージに同梱されています。以下から体験版をダウンロードできます。 | 開く | |
| 技術ドキュメント (PDF) このコンポーネントの機能、クイックスタート、Delphi および C++ Builder 向けのコードサンプル、一次資料のリファレンスを掲載しています。 | 開く | |
| ユーザーマニュアル (PDF) ライブラリのすべてのコンポーネントを網羅した総合マニュアルです。 | 開く | |
| ブログ — Delphi でパスキー、SAML SSO、LDAP、TOTP 2FA によるログインを実現する 6つの認証コンポーネントが1つの Delphi アプリケーションでどう連携するかを解説します。 | 開く |