NextcloudでのWEBログイン時に、2要素認証(Two Factor Authentication)を使ってみる

Nextcloud 11 での Webログイン時に、2要素認証によるログインを行うように設定してみます。

  1. Nextcloud での 2要素認証について
  2. Nextcloud 11.0.2 時点では、認証の種類は次の2つが対応しているようです。

    • Two Factor TOTP Provider (ソフトウェアトークン)
    • Two Factor U2F (ハードウェアのトークン)

    ハードウェアトークンというのは、下記のようなUSBデバイスを使って認証を行う方式のようです。
    ハードウェア方式は、また別途やり方を調べてみたいと思います。

    今回はソフトウェアトークンの設定方法についてまとめます。

    TOTP というのは、時間ベースで発行されるトークンです。

    発行されたトークンは、一定時間を過ぎると無効となり、また新しいトークンが生成される方式です。
    一定時間有効なので、一度きりの使用では無効にならず、時間内であれば何度でも使用が可能です。

    ※Nextcloud 11 では、30秒毎にトークンの表示が切り替わりますが、
     トークン自体は、約2分程度有効なようでした。

    では、設定していきます。

    2要素認証を導入される方は、Nextcloudをそれなりに使い込んでいるかと思いますので、細かい手順については割愛します。

  3. 必要なアプリを有効にする
  4. アプリの追加画面(アプリストア)=> 認証タブから、
    twofactor_totp アプリ: 1.1.0 を有効にします。

    また、twofactor_backupcodes: 1.0.0 が
    有効になっていることも確認します。(デフォルトで有効)

  5. 第2因子バックアップコードの生成(保険)
  6. まず、個人画面(settings/personal)=> 第2因子バックアップコードから、バックアップコードを生成しておきます。

    スマートフォンの破損や紛失などで、2要素認証が行えなくなった時にも、バックアップコードでログインすることが可能です。

    ただし印刷や手帳などに書き留めておくなどの保管が必要です。
    バックアップコードは一度に10個表示され、それぞれ1度の使用で無効化されていきます。

    バックアップコードが不要な場合は、この手順は必要ありません。

    またバックアップコードよる認証を無効にしたい場合は、
    twofactor_backupcodes アプリを無効にすればよいです。

  7. TOTP認証を有効にする
  8. 次に、個人画面(settings/personal)、TOTP second-factor auth にて、TOTP有効化にチェックします。

    TOTPが有効になると、設定用のQRコードが表示されます。

    設定用のQRコードは、一度しか表示されないので、QRコードが消えてしまった場合は、
    TOTPの無効化 => 有効化 を再度試します。

    TOTP2要素認証の設定

  9. TOTP対応アプリでQRコードを読み取る
  10. TOTP対応アプリで設定用QRコードを読み取ります。

    スマートフォンの場合は、Google Playストア(Android)や、App Store(iOS)などで、
    「TOTP認証」と入力すれば、対応アプリがたくさん出てきますので、お好きなものをどうぞ。

    自分は、IIJ SmartKey を使ってみました。

    TOTP対応アプリ

    TOTP対応アプリでQRコードを読み込み設定を保存すると、
    30秒ごとに数字6桁のトークンが表示されますので、
    この数字を Nextcloudのログイン時に入力します。

    IIJ SmartKeyによるトークン表示

    通常のユーザアカウント名とパスワードでの認証後、
    TOTPトークンによる追加認証の画面が表示されます。

    TOTP2要素認証画面

    トークンを間違えたり、トークンの有効期限が過ぎると、認証エラーとなります。

    TOTP2要素認証エラー

  11. バックアップコードによるログイン
  12. 何らかの理由により、2要素認証によるログインができなくなった場合、
    第2因子バックアップコードによるログインも可能です。
    コードは一度の使用で無効化されます。

    バックアップコードによるログイン

  13. 管理者操作による救済方法
  14. ユーザが2段階認証に必要なパスコードを取得できず、
    バックアップコードによるログインも不可能となった場合には、
    管理者による操作で、対象アカウントの2段階認証を無効にすることができます。

    occ コマンドの twofactorauth を実行します。

    sudo -u apache ./occ twofactorauth:disable testuser
    

    再度、対象ユーザの2段階認証の設定を行いたい場合は、
    occコマンドにて有効化する必要があります。

    sudo -u nginx ./occ twofactorauth:enable testuser