Red Hat Single Sign-onで、WebAuthnがGAに

Red Hatのソリューションアーキテクトの井上たかひろです。
WebAuthnがRed Hat Single Sign-On 7.6 からとうとうサポートになりました。 (7.6以前はTechnology Previewでした)
これによって、FIDO2規格に対応したOS/ブラウザ(スマートフォーン含む)で、生体認証やパスワードレス認証などが実現できます。

この記事では、サポート記念にWebAuthnを超簡単に試してみる設定手順を紹介します。 イチから超簡単に試せるようにlocalhost(localhost以外はhttps接続が必要になります)でやります。 また、端末はmacOS(Montery)で実施しています。

なお、WebAuthnがサポートになった旨の記載は下記にあります。

access.redhat.com

WebAuthnをやってみる

やってみる内容

やってみる内容は、初めてログインした際にwebauthnで生体認証(macのTouch ID)を登録して、 ログアウト後に、ユーザとパスワードを入力後に、webauthnで生体認証(macのTouch ID)してログインするシナリオです。 これから記載する手順は、はじめての方にもハマらずにwebauthnを試して頂けるように、設定を最小限にし、スクショ全張りで記載しています。

Red Hat Single Sign-On 7.6をインストールして起動

Red Hat Single Sign-on 7.6もしくはKeycloak 18をzipでダウンロードしてください。 Red Hat Single Sign-on 7.6.0のKeycloakのベースバージョンは18.0.0になります。 以降は、Red Hat Single Sign-on 7.6.0で実施しています。

Red Hat Single Sign-onのzipインストールは、zip解凍すれば終わりです。配置場所は、任意です。

$ unzip rh-sso-7.6.0-server-dist.zip

zipを展開して作成したディレクトリーは、SSO_HOMEとします。 環境変数にしておきます。

$ export SSO_HOME="zipを展開して作成したディレクトリー"

Red Hat Single Sign-Onの管理ユーザも作っておきます。(便宜上、admin/adminで作ってます)

$ $SSO_HOME/bin/add-user-keycloak.sh -u admin -p admin
Added 'admin' to '/xxxx/standalone/configuration/keycloak-add-user.json', restart server to load user

Red Hat Single Sign-Onを起動しておきます。

$ $SSO_HOME/bin/standalone.sh

Realmを作成する

testという適当な名前のRealmを作成します。

Red Hat Single Sign-Onの管理コンソールに、ブラウザでhttp://localhost:8080/auth/にアクセスします。

下図の左側にある「Administration Console」をクリックします。

admin/adminでログインします。

ログイン後、左上のMasterにカーソルを合わせると、[Add relam]という青いボタンがあるので、クリックします。

Nameにと入力して、[Create]ボタンをクリックします。

webauthn policyの設定

test Realmを作成したら、Authenticationの設定で、webauthn policyの設定をやります。

test Realmを作成後、test Realmの画面に移動しています。 左側のペインにある[configure]の[Authentication]をクリックします。

Authenticationの設定画面で[Webauthn policy]のタブがあり、クリックします。

[Webauthn policy]の画面で、以下を設定します。

Relying Party ID : localhost

Required Actionsの設定

Authenticationの設定画面で[Required Actions]のタブがあり、クリックします。 表の[Register]をクリックし、プルダウンから[Webauthn Register]を選択し、[OK]ボタンをクリックします。

表に[Webauthn Register]が追加され、Webauthn Registerのところの[Default Action]にチェックをつけます。 これで、新規ユーザでログインした際に、Webauthnの登録が求められるようになります。

認証フローの設定

test Realmを作成したら、Authenticationの設定で、webauthnの設定をやっていきます。 (はじめて、認証フローを設定する場合は、画面の操作に癖を感じますが、慣れるとそうでもなくなります)

左側のペインにある[configure]の[Authentication]をクリックします。

Authenticationの設定画面でFlowsのタブがあり、[Browser]が表示されています。 右側にある[copy]ボタンをクリックして、[Copy of browser]を[webauthn browser]にして、[OK]ボタンをクリックします。

表の左上にあるプルダウンを[Browser]から追加された[webauthn browser]に切り替えます。

表にある[Webauthn Browser Browser - Conditional OTP ]の行の一番右の[Actions]->[Edit Flow]をクリックします。

[New Name]の[webauthn browser Browser - Conditional OTP]を[Conditional webauthn]に修正し、[New Description]の文字列を消して、[OK]ボタンをクリックします。 (この作業自体実施しなくても問題ないのですが、OTPの文字列が残ってるのが気持ち悪いので修正しているだけです)

表の一番下にある[OTP Form]の行の一番右の[Actions]->[Delete]をクリックします。

消していいか?と聞かれるので、[Delete]ボタンをクリックして消します。(webauthnをこの後で追加します)

表にある[Conditional Webauthn]の行の一番右の[Actions]->[Add exectuion]をクリックします。

Providerを選ぶプルダウンで[WebAuthn Authenticator]を選んで、[register]ボタンをクリックします。

さきほどの操作後、Flowの設定画面に戻っています。表の一番下に[WebAuthn Authenticator]が追加され、Requirementで[ALTERNATIVE]にチェックします。(最初は[DISABLED]になっています)

認証フローの設定はこれで終わりです。

Bindingsの設定

さきほど設定した認証フローの[webauthn browser]をbrowserの認証フローで使うように設定します。 Authenticationの設定画面でBindingsのタブをクリックし、Browser Flowのプルダウンから[webauthn browser]を選択し、[Save]ボタンをクリックします。

これで、webauthn周りの設定は終わりです。

ユーザの追加

webauthnを試す前に、ユーザを作成しておきます。 左側のペインにある[Manage]の[Users]をクリックし、[Add user]をクリックします。

[Add user]画面で、user nameに[user]と入力し、[Save]ボタンをクリックします。

user作成後、[Credentials]のタブをクリックし、PasswordとPassword Confirmationに[user]と入力し、TemporaryをチェックしOFFにして、[Set Password]ボタンをクリックします。

ユーザーのパスワードは本当に設定するの?と聞かれます。[Set Password]ボタンをクリックします。

webauthnを試す

今回は、Red Hat Single Sign-onのアカウントページにアクセスして、webauthnを試してみます。 このURLhttp://localhost:8080/auth/realms/test/account/にアクセスします。(今回はSafariでアクセスしました)

アカウントページにアクセス後、右上の[Sign in]ボタンをクリックします。

初回ログインで、user/userと入力し、[Sign in]ボタンをクリックします。

Security Key Registrationの画面になりますので、[Register]ボタンをクリックします。

Touch IDの登録画面になりますので、Macの指紋認証をやります。

登録ができたら、登録時の名前のダイアログが出てきますが、ここはそのまま[OK]ボタンをクリックします。

ログインできました。再度ログイン確認したいので、右上の[Sign Out]ボタンをクリックして、ログアウトします。

最初の画面に戻ってきたので、右上の[Sign in]ボタンをクリックして、再度ログインします。

user/userと入力し、[Sign in]ボタンをクリックします。

おっ〜、生体認証画面になりました。[Sign in with Security Key]ボタンをクリックします。また、Touch IDが出てくるので、指紋認証後、ログインできます。

終わりに

今回は、webauthnで生体認証(macのTouch ID)をやってみました。この他にも、Passwordlessなども可能なので、ぜひ色々お試し頂いて、ご活用して頂ければと思います。

* 各記事は著者の見解によるものでありその所属組織を代表する公式なものではありません。その内容については非公式見解を含みます。