本稿はJCB Advent Calendar 2024の12月19日の記事です。
JCBデジタルソリューション開発部の金築です。
昨今、インターネットにおける認証技術は、ID/パスワードからワンタイムパスワードを用いた多要素認証へと遷移し、今では生体認証やセキュリティキーを用いたFIDO2/WebAuthnといったパスワードレス認証の導入が進んでいます。
FIDO2/WebAuthnを導入することで、認証の利便性が向上し、従来のパスワード管理によるセキュリティリスクやフィッシング攻撃といった攻撃に効果的であります。
一方で、FIDO2/WebAuthnを導入したシステムのテストでは、従来の方式とは異なる課題が発生します。
そこで、本記事ではFIDO2/WebAuthnを導入したシステムにおけるテスト自動化について紹介します。
背景
FIDO2/WebAuthnは、ユーザーが認証器(ハードウェアトークン、スマホの指紋認証や顔認証)を使用して認証する仕組みを提供しています。
テストにおいて、パスワード認証ならば事前用意したパスワードを自動入力させることで対応できましたが、FIDO2/WebAuthnの認証フローを再現するには、認証器を用意して認証(指紋認証など)する必要があります。
この認証を手動で行うのは非常に手間がかかるので、ツールを駆使した自動化を実現したいと考えました。
FIDO2/WebAuthn のテスト自動化の概要
今回は以下のツールを組み合わせて、テストの自動化を実現します。
- JMeter:いわずと知れた負荷計測ツール。WebDriverを動かすために利用。
- WebDriver(Selenium):ブラウザ操作ツール
- Virtual Authenticators(仮想認証器):Chromeの開発者ツール
Virtual Authenticators(仮想認証器)は、Chromeの開発者ツールの機能であり認証器を作成できます。
仮想認証器の使い方
開発者ツールを開きます。その後、コマンドメニュー(Command+Shift+P)を開いて「WebAuthn」を実行すると以下のパネルが表示されます。
パネル内の「Enable virtual authenticator environment」にチェックを入れると、仮想認証器の構成を設定できるようになります。
設定し「Add」をすると仮想認証器が作成されます。 この状態で、FIDO2/WebAuthnでの登録処理を行うと、生体認証などを挟まず作成した仮想認証器で認証が登録されます。
上記は手動操作した場合ですが、今回実現した方法はこれらの操作をWebDriver(Selenium)で行いテストの自動化を実現します。
JMeterで実装した内容
ブラウザで行った設定をWebDriverで実現してみました。
// 開発者ツールの有効化 DevTools devTools = ((HasDevTools) webDriver).getDevTools(); devTools.createSession(); // 仮想認証器の機能を有効化 devTools.send(WebAuthn.enable(Optional.empty())); // 仮想認証器の構成を設定 VirtualAuthenticatorOptions options = new VirtualAuthenticatorOptions() .setProtocol(VirtualAuthenticatorOptions.Protocol.CTAP2) .setTransport(VirtualAuthenticatorOptions.Transport.INTERNAL) .setHasResidentKey(false) .setHasUserVerification(false) .setIsUserConsenting(false) .setIsUserVerified(false); // 仮想認証器の作成 VirtualAuthenticator virtualAuthenticator = ((HasVirtualAuthenticator) webDriver).addVirtualAuthenticator(options);
上記実装以降にWebDriverで登録操作を行うと、自動的に仮想認証器を用いて認証登録できます。 これにより、WebDriverを用いたスクリプトでFIDO2/WebAuthnの認証フローを再現でき、テストの自動化が可能となります。
まとめ
今回は、WebDriver(Selenium)を用いて仮想認証器を用いたFIDO2/WebAuthn のテスト自動化の方法についてご紹介しました。 認証技術が複雑になるにつれて、開発難度も上がっている中で今回紹介した方法が開発者の一助になれば幸いです。
終わりに
JCBでは我々と一緒に働きたいという人材を募集しています。 詳しい募集要項等については採用ページをご覧ください。
本文および図表中では、「™」、「®」を明記しておりません。 記載されているロゴ、製品名は各社及び商標権者の登録商標あるいは商標です。