4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

WordPressサイトにシングルサインオン(SSO)と多要素認証(MFA)を導入する

Last updated at Posted at 2024-10-12

背景と目的

管理対象のWordPressサイトが多数あるため、Google Authenticator等でのTOTPの利用が事実上困難になっていました。
そうは言っても、今のご時世に多要素認証無しというのはまずいので、シングルサインオンを導入して多要素認証を使えるようにしました。

シングルサインオン(SSO)とは

1つのアカウントで様々なアプリケーションにログインできる仕組みです。GoogleアカウントやAppleIDで様々なサービスにログインできるのが身近な例でしょうか。
SSOのサービスが多要素認証を提供していれば、連携するサービスに一括で多要素認証を導入できます。

SSOサービスの選定

組織でSSOを利用する場合、Active Directoryとか、Auth0等が一般的なのでしょうが、零細事業者にはなかなか手が出ません。
Googleアカウント認証も考えられますが、非技術者が扱う場合にGCPの画面で戸惑ってしまいそうだったり、多数のサイトを登録できるのか不透明なのがちょっと悩ましいところでした。

IIJさんがちょうどいいサービスを提供しているので、こちらを使うことにしました。

IIJ IDサービス

  • SSOプロトコルとしてSAML 2.0とOpen ID Connect 1.0に対応
  • 1ユーザーから利用可能。最低利用期間なし、初期費用なし
  • 多要素認証を利用する場合、1IDにつき210円(税抜, 2024/10現在)
  • 連携するサービス数に対する費用は発生しない

シンプルなサービスなので、管理画面はわかりやすいと思います。

申し込んでから使えるようになるまで1~2週間かかります。1か月間の試用もできます。
クレカ払いはできません。自動引落か銀行振込での支払いになります。

SAML or Open ID Connect

IIJ IDサービスではSAML 2.0とOpen ID Connect 1.0に対応しています。
仕組みは色々違いますが、WordPressでSSOを利用するという観点ではさほど違いはない(はず)です。

本当は証明書管理が不要なOpen ID Connectにしたかったのですが、残念ながらIIJ IDサービスではOpen ID ConnectのWordPressプラグインが動作しなかった1のでSAMLを選択しました。
SAMLで使われる証明書の有効期間が15年あるので、そのうちOpen ID Connectに乗り換えたいところではあります。

SAMLプラグインの選定

SAML対応のプラグインは複数ありますが、今回は利用者が多く継続的に更新されているminiOrange社のプラグインを使用します。miniOrange社はSSOサービスを提供している企業です。

無料版プラグインはほとんどの機能がロックされていますが、少人数の管理者ログインに使うには十分です。

設定手順

大まかな設定手順は以下の通りです。

  1. 事前準備
    • IIJ IDサービスにユーザ/グループを作成
    • 多要素認証の設定
  2. WordPressプラグインをインストール
  3. IIJ IDサービスに新規「アプリケーション」を登録する
  4. 新規登録したアプリケーションを使えるユーザを登録する
  5. アプリケーションの「メタデータファイル」をダウンロードして、そのファイルをWordPressプラグインの設定ページにアップロードする
  6. WordPressプラグインの設定ページから「メタデータファイル」をダウンロードして、それをIIJ IDサービスのフェデレーション設定画面にアップロードする
  7. IIJ IDサービスを通して登録されるWordPressユーザーの役割(管理者、編集者等)を設定する
  8. 動作確認

以下で詳細に説明します。

1. 事前準備

ユーザとグループの設定

IIJ IDサービス上で必要なユーザを作成しておいてください。

複数ユーザで使う場合はグループを作成するのがお勧めです。

多要素認証の設定

多要素認証を強制するので、ログインポリシーの設定で第二要素としてSmartKey(スマホ上の認証アプリ)やFIDO2キー(いわゆるパスキー)を追加します。

各ユーザーは、多要素認証デバイスを登録しておきます。

SmartKeyはIIJ IDサービスで使用される認証アプリです。IIJ IDと紐づけることで、認証要求があった際にアプリ内のアイコンをスライドすることで認証できます。
※ 紐づけの際にはSMS認証が必要です。

FIDO2キー(パスキー)はログイン後でないと登録できません。ログイン時に登録したい場合は、上記のログインポリシー設定で明示的に許可する必要があります。
運用に慣れないうちはSmartKeyを使うのがいいと思います。

2. WordPressプラグインのインストール

  1. 導入対象のWordPressに管理者でログインする
  2. SAML Single Sign On – SSO Loginプラグインをインストールし、有効化しておく

後の手順でIIJ IDコンソールとWordPress管理画面を行ったり来たりするので、両方の画面を開いたままにしておきます。

3.IIJ IDサービスにWordPressサイトを登録

アプリケーションを追加する

  1. 管理者アカウントでIIJ IDコンソールにログインします

  2. メニューから アプリケーション > アプリケーションの管理 を選択します

  3. アプリケーションを追加する ボタンをクリック

  4. カスタムアプリケーションを追加する をクリック

  5. SAMLアプリケーション を選択して 次へ進む をクリック

  6. アプリケーション情報を入力します
    2024-08-26_11h18_22.png

    • アプリケーション名 にWordPressのサイト名を入力します
    • アプリケーションの説明アプリケーションロゴ は必要に応じて設定します
    • IDプロバイダの選択はアプリケーション専用のエンティティIDを利用のまま
  7. アプリケーションを追加する ボタンをクリック

※ 多数のサイトを登録すると、アプリケーションの追加ができなくなる場合があります。その時はサポートに問い合わせてみてください。

利用者の追加

作成したアプリケーション(=WordPressサイト)にログインできるユーザを指定します。

  1. 追加されたWPサイトの 編集する ボタンをクリック
  2. 利用者設定 タブをクリック
  3. 利用者を追加する ボタンをクリック
  4. WordPressにログイン可能にするグループまたはユーザを検索する
  5. 利用者を追加する ボタンをクリック

4. IDプロバイダ情報の設定

IIJ IDサービスの情報をWordPressに登録します。

  1. IIJ IDコンソールのアプリケーション編集画面でIDプロバイダ情報タブをクリック
    2024-08-26_16h15_22.png

  2. 一番下にあるメタデータのダウンロードするボタンをクリック

  3. idp_metadata.xmlファイルがダウンロードされます

  4. WordPress管理画面に移動してminiOrange SAML 2.0 SSOをクリック

  5. "Let's get started"の画面が表示されたらConfigure You IDP Nowボタンをクリック
    ※ たくさん並んでいるボタンはマニュアルへのリンクなので設定には関係ありません
    ※ "Let's get started"の画面が出なければ無視して良い

  6. "Confirure Service Provider"のUpload IDP Metadataをクリック

  7. Identity Provider NameにIIJ_IDと入力
    2024-08-26_11h45_31.png

  8. "Upload Metadata"のファイルを選択ボタンをクリックして、ダウンロードしておいたIDプロバイダ情報のファイル(idp_profile.xml)を選択する

  9. Uploadボタンをクリックする

  10. Identity Provider details saved successfully.と表示されれば成功

5. サービスプロバイダ情報の設定

WordPress側の情報をIIJ IDサービスに登録します。

  1. Service Provider Metadataタブをクリック
  2. "Provider Metadata URL"のDownloadボタンをクリックする
  3. Metadata.xmlというファイルがダウンロードされます
  4. IIJ IDコンソールのアプリケーション編集画面に戻り、フェデレーション設定をクリック
  5. "SAML基本情報"のSPのメタデータをアップロードするを選択
  6. ファイルを選択ボタンをクリック
  7. 先ほどダウンロードしたMetadata.xmlを選択
  8. 変更を適用するボタンをクリック

6. 新規ユーザーの権限設定

  1. Attribute/Role Mappingをクリック
  2. 下にスクロールして、"Role MappingのDefault Role"を管理者に変更する
    ※ 運用ポリシーによっては編集者にすることも考えられます
  3. Updateボタンをクリック

7. 動作確認

  1. WordPressからログアウトする
  2. Login with IIJ_IDボタンをクリック
  3. IIJ IDの認証画面が表示された場合にはログインを行う
  4. 管理画面にログインでき、ユーザーメニューが表示されていることを確認する
    ※ 役割が「管理者」の場合です

FAQ

SSOユーザー以外はどうなる?

従来通りユーザー名/パスワードでログインできます。
SSOを使わないユーザーを追加登録することもできます。

WordPressにBasic認証をかけていても使える?

使えます。
SAML2.0では、IdP(ここではIIJ IDサービス)からSP(WordPress側)へ直接アクセスしてくることはありません。

非HTTPSサイトで使える?

簡単に試してみた限りでは、ブラウザの警告画面から進めなくなる現象が発生しました。行ったり来たりしているとログインできるようですが、お勧めしません。
HTTPS対応を先にやりましょう。

WordPressやPHPが古くても使える?

SAML Single Sign On – SSO Loginプラグインのバージョン要件は以下の通りです。

  • WordPress version 3.7またはそれ以降
  • Tested up to 6.6.2
  • PHP version 5.6またはそれ以降

※ プラグインVersion 5.1.9、2024/10現在

IIJ IDサービス側でユーザを削除したら、WordPress上のユーザーは削除される?

削除されません。
IIJ IDサービス側でユーザを削除、またはアプリケーションの利用者から外した場合、そのユーザはWordPressにSSOでログインできなくなります。しかし、WordPress上のユーザーは残ったままになるので、ユーザーが不要であれば手動で削除する必要があります。
ユーザー同期のためのSCIMというプロトコルがありますが、miniOrange社のSCIMプラグインではユーザーの更新・削除は有料版の機能となります。
(関係ないけど、IIJ IDサービスは「ユーザ」、WordPressは「ユーザー」表記なんですよね...うーん)

SSOサービスダウン時はどうなるか

SSOを使っているWordPressユーザーでもWordPressのパスワード認証が有効なので、万が一SSOサービスがダウンした場合には、従来通りの方法でWordPressユーザーのパスワードをリセットしてログインすることはできます。もちろん、この場合はSSOで使っている多要素認証が働きません。

裏を返すと、SSOと多要素認証を迂回できる可能性があります。miniOrange社のプラグインではSSOを強制する機能は有料版の機能となります。
他のプラグインを使うことでパスワード認証を無効化する方法はあるかもしれません。

SSOでログインしようとしたらError code: WPSAMLERR006が出た

IIJ IDサービスのアプリケーション登録の「利用者設定」で許可されていないユーザがログインしようとするとこのエラーになります。

検証バージョン

WordPress 6.6.2
SAML Single Sign On – SSO Loginプラグイン 5.1.9

参考資料

IIJ IDサービス マニュアル[管理者用]
https://manual.iij.jp/iid/admin-help/

IIJ IDサービス マニュアル[管理者用] SAMLアプリケーション
https://manual.iij.jp/iid/admin-help/35212431.html

miniOrange社による導入マニュアル
https://plugins.miniorange.com/saml-single-sign-on-sso-wordpress-using-custom-idp
※ 日本語も選択できますが、昔の自動翻訳のようなので英語版にリンクしてあります。
途中で有料版の説明が出てくるので「Free」を選択してください。

最後に

ゆくゆくはFIDO2キーだけにしてパスワードレス化したい所。
他に使えそうなサービスやプラグインがあればコメントいただけると嬉しいです。

更新履歴

2024/10/15 FAQに「WordPressやPHPが古くても使える?」を追加
2024/10/23 アプリケーションの追加ができなくなる場合があることを追記
2024/10/25 Error code: WPSAMLERR006について追加

  1. Open ID Connectの設定をWordPressプラグイン側でOAuth2と見なして設定すれば一応動くようではあります。しかし、意図された使い方ではないと思われます。

4
2
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
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?