17
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

KeycloakのWebAuthn Passwordlessについて

Last updated at Posted at 2020-02-24

きっかけ

やってみたこと

  • ほぼドキュメント記載のことをつらつら実施
    • WebAuthnポリシーの設定
    • WebAuthnフローの作成
    • Authenticatorの登録と認証
    • Credintialsのデータ保存確認

前提条件

  • KeycloakにlocalhostもしくはHTTPSでアクセスできるようにしておく必要があります。
  • FIDO2(CTAP2)対応のAuthenticatorを準備しておく
    • Authenticatorがない場合はChromeの拡張機能のVirtual Authenticator Tabsを利用すれば、仮想のAuthenticatorとして利用することができます。
      • ちなみにAttestation Conveyance Preference を direct にするとバリデーションのチェックにかかってエラーになります。

WebAuthnポリシーの設定について

  • ver9.0では[WebAuthn Policy]と[WebAuthn Passwordless Policy]の設定ができるようになっています。
WebAuthnPasswordless

今回はパスワードレスを検証してみたいので、[WebAuthn Passwordless Policy]の設定を行います。

  • Relying Party Entity Name

    • KeycloakがRelying Partyとなりますので、Relying Partyの名称を入力します。
  • Relying Party ID

  • Attestation Conveyance Preference

    • Acceptables AAGUIDsの設定をする場合はAuthenticatorの情報の検証をする必要があるので direct にします。
  • Authenticator Attachment

    • 許可するAuthenticator が外部デバイスか、内部デバイスかに選択をします。
      • platform 内部デバイスをAuthenticatorとして利用する場合
      • cross-platform USBやNFCやBluetoothで外部デバイスをAuthenticatorとして利用する場合
  • User Verification Requirement

    • Authenticator独自の認証を求めるかどうかの設定になります。(デフォルト値 preferred)
      • required 必ず認証を求める
      • preferred Authenticatorが対応してたら認証を求める
      • discouraged 認証を求めない
  • Acceptable AAGUIDs

    • AAGUID(Authenticator Attestation Global Unique Identifier)とはAuthenticatorのプロダクトごとの識別子のことです。
    • プロダクトごとにAAGUIDがあり、特定のプロダクトのAutenticatorのみしか認めない場合に利用します。

WebAuthnを使った際の認証フローの作成について

authentication_flow
  • ブラウザフローを作成した認証フローに変更します。
Binding

Authenticatorの登録について

  • Authenticator の登録はユーザ登録時やユーザ情報を編集する画面にある[必要なアクション]から[WebAuthn Register Passwordless]を設定します。
 RequiredActio
  • https://{Keycloakサーバホスト}/auth/realms/{レルム名}/accountにアクセスするとブラウザフローが開始されます。
  • 今回の認証フローはWebAuthn PasswordlessもしくはOTP&Passwordなので、はじめにOTP&Passwordによる認証を行った後、Authenticatorの登録が求められるようになります。
    • 下の画像ではOTPの部分はカットしてます。

webauthn_regist

Authenticatorを使った認証について

  • OTP&PasswordとAuthenticator(Keycloakの画面ではSecurity Key)を登録すると、[Try Another Way]が表示されるので、どちらで認証するか選択することができるようになっています。

webauthn

Credentialデータの保存について

  • DB上はCREDENTIALSというテーブルにデータが保存されていました。
  • USER_IDはUSER_ENTITYテーブルのUSER_IDと紐づいています。
none
  • AAGUIDが "aaguid": "00000000-0000-0000-0000-000000000000", となっていたので何で?って思いました。
  • よくよく考えるとAttestation Conveyance Preference を direct にしていなかったため、AAGUIDの情報が登録されていなかったようです。
  • 試しにAttestation Conveyance Preference を directにするとAAGUIDの情報が登録されていました。
direct

感想

  • Acceptable AAGUIDs について
    • UnAccesptable AAGUIDsの設定(ブラックリストの設定)ができるようにしたいという場合は設定が大変なのかなと思いました。
    • FIDO Alliance Metadata ServiceにAuthenticatorの一覧が管理されているようです。
    • このMetadata Service(MDS)に登録されているAAGUIDを[Accesptable AAGUIDs]に設定するのが良さそうに思いました。
  • AAGUIDについて
    • AAGUIDはどうやって採番されてるんだろうっていう疑問があります。
    • FIDOアライアンスの資料には、AAGUIDはAuthenticatorの製造元が重複しないように割り当てるとありました。
    • MDSに登録されている限りは重複したりしなさそう。
17
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?