Red Hat Single Sign-On 7.4の注目機能

初版: 2020/4/21
著者: 田畑義之, 株式会社日立製作所 (GitHubアカウント: [@y-tabata](https://github.com/y-tabata))

# はじめに
Red Hat Single Sign-On (RHSSO)とは、OSSのIAM (Identity and Access Management)製品であるKeycloakのエンタープライズ版です。このたび、2020/4/8にKeycloak 9.0.3をベースとする、RHSSO 7.4.0がリリースされましたので、その注目機能を見ていきましょう。公式のリリースノートは[こちら](https://access.redhat.com/documentation/en-us/red_hat_single_sign-on/7.4/html/release_notes/index)です。
本記事は、あくまで執筆者の見解であり、日立製作所及びRed Hatの公式なドキュメントではありません。

# RHSSO 7.4の注目機能
RHSSO 7.4の注目機能として、ここでは3つの機能をご紹介します。

## 認証機能のグレードアップ
RHSSO 7.4では、認証機能を司る認証フローの部分に大きなリファクタリングが入り、2要素認証やパスワードレス認証等を設定することができるようになりました。中でも特に注目すべきは、**[W3C Web Authentication](https://www.w3.org/TR/webauthn/) (WebAuthn)**を設定できるようになったことです。WebAuthnとは、W3Cが策定しているWebブラウザを利用した認証方式の標準仕様であり、従来のパスワードやOTPを用いた認証方式よりも強固な認証方式として注目を浴びています。KeycloakにおけるWebAuthnサポートの詳細に関しては、KeycloakにWebAuthnを実装した[@tnorimat](https://github.com/tnorimat)さんによる解説記事「[keycloakのWebAuthnサポート実現までのいきさつ](https://qiita.com/tnorimat/items/6d5b055292f2d65427bd)」をご参照ください。WebAuthnの使い方に関しては、本書の後半で解説します。

## アカウントサービスの強化
RHSSO 7.3以前より、ユーザが自身でアカウントを管理するための"アカウントサービス"というビルトインのサービスが提供されていましたが、RHSSO 7.4では、そのアカウントサービスのコンソールが、[React](https://reactjs.org/)と[PatternFly 4](https://www.patternfly.org/v4/)を採用して生まれ変わりました。以前と比べて、アカウントサービスのコンソールが格段にカスタマイズしやすくなった印象です。RHSSO 7.4では、本機能はまだテクノロジプレビューですが、画面例をWebAuthnの使い方と併せて本書の後半で少しだけ紹介します。

## Hostname SPIの実用性向上
Hostname SPIとは、RHSSOが自身のURLの生成方法を実装するためのインタフェースです。Hostname SPIの詳細については「[KeycloakのHostname SPI](https://qiita.com/t-mogi/items/ab79b30f48ad6001e94a)」をご参照ください。RHSSO 7.3以前は、Hostname SPIの実装として、`RequestHostnameProvider`と`FixedHostnameProvider`が提供されていました。しかし例えば、認可リクエストとトークンリクエストは"外部ネットワーク"から、トークンイントロスペクションと管理コンソールへのアクセスは"内部ネットワーク"から行いたいといったありふれた要件でさえ、`RequestHostnameProvider`や`FixedHostnameProvider`では満たせなかったため、独自のSPI実装が必要となるケースが多々ありました。このような使い勝手の悪さを改善するため、RHSSO 7.4では`DefaultHostnameProvider`というHostname SPIの実装が提供されています。`DefaultHostnameProvider`では、上述した要件のみならず、ブラウザからリクエストされるURLをレルム単位で上書きしたり、パブリックドメインを用いた管理コンソールへのアクセスを抑止したりすることもでき、実用性が大幅に向上しました。

# WebAuthnを試してみた
実際にRHSSO 7.4の注目機能の一つであるWebAuthnを使ってみましょう。今回は、通常のユーザ名とパスワードを使った認証に、WebAuthn対応の認証器を使った認証を加えた、2要素認証を設定して試してみます。
WebAuthn対応の認証器ですが、今回はWebAuthnを手軽に試すことのできるGoogle Chrome拡張の[Virtual Authenticators Tab](https://github.com/google/virtual-authenticators-tab)を使います。Virtual Authenticators Tabが、認証器の代わりとなって、ユーザの認証成功をRHSSOに伝えてくれます。

## 事前準備
WebAuthnは、RHSSO 7.4ではテクノロジプレビューの機能ですので、サーバ起動時に、`-Dkeycloak.profile=preview`というオプションをつけて、テクノロジプレビュー機能を有効にします。
また、今回は動作検証にアカウントサービスを使います。折角ですので、新しいアカウントサービスのコンソールを使うべく、アカウントサービスの新しいテーマである`rh-sso-preview`を設定します。
![change_theme.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267112/e8017f2d-780a-c663-9311-530f384a5fc4.png)

## WebAuthnを含む2要素認証の設定
[マニュアル](https://access.redhat.com/documentation/en-us/red_hat_single_sign-on/7.4/html/server_administration_guide/authentication#webauthn)に沿って、WebAuthnを含んだ2要素認証の設定をしていきましょう。
まずは、WebAuthn対応の認証器を登録できるように、`Webauthn Register`をRequired Actionに追加します。
![required_action.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267112/e3f6bd20-9596-af65-0981-8fcd68743c6b.png)

次に、WebAuthn認証を含んだ認証フローを作成します。
![webauthn_browser_flow.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267112/e98ded8f-20dd-c710-8669-3f99a09336c1.png)

作成した認証フローをBrowser Flowにバインドします。
![binding.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267112/a7597841-262a-04cd-fb6c-a9f9cd5f6a15.png)

以上で設定は終わりです。

## 動作確認
実際に動作を確認してみましょう。
今回はアカウントサービスにアクセスし、設定した2要素認証の動作を確認します。
![account_service_url.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267112/d1b71209-1e44-74a7-14dd-a8710f1a4627.png)

新しいアカウントサービスのコンソールが表示されます。ログインボタンを押します。
![account_service.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267112/b660e2e0-3874-eb9d-cfc6-3551d4aad644.png)

ログイン画面が表示されます。
![account_service_username_password.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267112/bb16d8e3-eb26-0d8b-6f57-e200ad9f1c68.png)

ここで認証器(Virtual Authenticators Tab)の設定をしましょう。F12を押し開発者ツールを起動します。Virtual Authenticators TabをGoogle Chromeに導入済みの場合、Virtual Authenticatorsというタブが表示されます。そのタブを使って認証器(Authenticator)を追加します。
![devtools.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267112/5aed812e-c651-a91c-2c72-8083f7ce72cc.png)

ログイン画面に戻り、ユーザ名とパスワードを入力してログインボタンをクリックします。
![account_service_login.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267112/c0891196-477c-6170-2dee-1f6558372b31.png)

認証器の登録画面が表示されました。OKボタンをクリックして認証器を登録します。
![security_key_registration.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267112/56cacb9d-d0cd-7f05-298a-eb39723cc16e.png)

アカウントサービスにログインできました！登録した認証器を確認してみましょう。Signing Inをクリックします。
![account_service_top.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267112/3fcb4cf5-3138-66a8-93f5-94e6498db008.png)

先ほど登録した認証器が正しく登録されていますね。
![signing_in.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267112/18764d6f-8815-7b2f-e9c0-1b47e01c1300.png)

# おわりに
本稿では、RHSSO 7.4の注目機能をご紹介しました。また、中でも特筆すべき機能であるWebAuthnの使い方もご紹介しました。RHSSO 7.4には、ここで取り上げた機能以外にも、例えばFinancial-grade API (FAPI)のサポートに関連する機能追加など、数々の機能が取り込まれています。IAM (Identity and Access Management)製品として着実にパワーアップしているRHSSOを、是非この機会に使ってみてはいかがでしょうか。