SAML認証をWordPressとKeycloakを使ってやってみました。
参考)「KeycloakでSAMLを使ってみる(WordPress編)」
https://qiita.com/katakura__pro/items/1e65e0bde7fda75332a1
環境)
php v8.1
apache 2.4.52
mysql 8.0.32
WordPress 6.1.1
OneLogin SAML SSO v3.4.0Keycloak-15.0.2
OpenJDK 11.10.18Webブラウザ: 192.168.1.228 / Chrome / windows
Keycloak(n07): 192.168.1.148 / Ubuntu 20.04
WordPress(n01): 192.168.1.217(decode2.red:hostsに記述) / Ubuntu 22.04※Keycloakは前回と同じ。WordPressのセットアップはここでは割愛。
WordPressはブログエンジンとして有名で、このブログでも利用させていただいております。
ここでは、WordPressを利用するユーザをKeycloakに登録されたユーザで認証するテストです。WordPressのログイン画面を使わないだけですので、ユーザは両方に登録する必要があります。(ユーザIDとメールアドレス)
WordPressのSAML関連のプラグイン
最初は、現在のWPバージョンと互換性があるということと、インストール数が多いのでminiOrangeのプラグインを使いましたが、すべての機能を使うのには有料ということに途中で気づき、参考記事あるOneLOginにしました。(未検証ということでいろいろと修正が必要でした)
プラグインはローカルのWordPressということもあり、プラグイン画面からのインストールではなくwp-content/pluginsフォルダにダウンロードしたファイルを置きました。
設定に関しては項目が多いのと、注意事項があることから、最初に動作させた画面とSAML認証のフローを確認します。
ブログ画面http://decode2.red/wp/にアクセス
※本来ブログの閲覧は、認証は不要ですが、保護領域としてここに設定しました。/wp/wp-admin/という管理者用ログインにも対応します。(ブログ画面だけでなく、それぞれのダッシュボードにアクセスできることも確認)
※user22というユーザは、WordPressで管理者権限も持つようにしておきます。(管理者をわけるとWordPressの設定用のadminをKeycloakに登録する必要があるため)
※「こんにちは」の後にある姓名は、WordPressの設定によるもの
WordPressのログイン画面(wp-login.php)がスキップされているのを確認できました。
KeyCloak設定
参考サイトでは、”Client Signature Required”をONにしますが、下記エラーのためOFFにしました。
ERROR [org.keycloak.protocol.saml.SamlService] (default task-16) request validation failed: org.keycloak.common.VerificationException: SigAlg was null
….
WARN [org.keycloak.events] (default task-16) type=LOGIN_ERROR, realmId=wp, clientId=null, userId=null, ipAddress=192.168.1.228, error=invalid_signature
参考) 「テスト用keycloak&saml構築」
https://dev.growi.org/5e4cfa39a2bdcf0048d69eb9
ONの場合、”Keys”タブがあわられ、PrivateKey, CertificateをWordPress側に記述します。
あとはusernameとemailをマッピングします。
WordPress設定
項目が多いため空欄以外をのせました。
entityID、X509Certificateは下記から取得します。
http://192.168.1.148:800/auth/realms/wp/protocol/saml/descriptor
未検証のプラグインのため下記を参考にコード修正が必要でした。
「Support duplicated Attribute Names?」
https://github.com/SAML-Toolkits/php-saml/issues/223
「How to Solve “Fatal Error: Call to Undefined Function is_plugin_active()” Problem on WordPress」
https://www.aurodigo.com/how-to-solve-fatal-error-call-to-undefined-function-is-plugin-active-problem-on-wordpress
最後にWordPressでログアウトしたときの挙動ですが、まだセッションが有効になっていますので、再びページにアクセスするとログインした状態になります。
実際に動かしてみないとわからないことがいろいろとありました。