WordPressにSAML認証を追加
schedule 2019/02/14 refresh 2023/11/09
こんにちは、セシオスサポートチームです。
今回はSimpleSAMLphpを使ってWordPressでSAML認証をする方法を紹介したいと思います。
SAML認証を使うことによって、ユーザを動的に作成することができ、パスワードもいちいち設定せずに済みます。
目標
WordPressでSAML認証をする
ユーザがWordPressへログインする場合にWP SAML Authプラグインを使用してSAML認証をします。
プラグイン内部では、SimpleSAMLphpが動いており、SimpleSAMLphpからの認証要求をSeciossLinkが受け取ってSeciossLinkがユーザの認証を受け持ちます。
認証が通ればプラグインがWordPressまで認証情報をリレーしてログインさせます。
また、初回のSAML認証時にWordPress側にユーザが存在しなければ自動的に登録までを行います。
環境
SeciossLink
WordPress v4.8.8
SimpleSAMLphp v1.16.3
WP SAML Auth プラグイン v0.5.1
条件
WordPress が導入済みであることを想定しています。
本稿では /var/www/wordpress/... のように/var/www 配下にインストールされていることを前提とします。
プラグイン導入
管理者権限のアカウントでwordpressにログインして下さい。
メニューから「プラグイン」→「新規追加」とクリックし
”WP SAML Auth” でプラグインを検索します。
検索結果の上位に同名のプラグインが表示されるのでインストールボタンをクリックし、インストールします。
インストール後はプラグインを有効にしてください。
プラグイン設定
メニューから「プラグイン」→「インストール済みプラグイン」に表示されている、”WP SAML Auth”の編集リンクからSAML認証に必要な情報を設定します。
下記設定をコピーし、貼り付けて上書きして下さい。
<?php /** * Plugin Name: WP SAML Auth * Version: 0.5.1 * Description: SAML authentication for WordPress, using SimpleSAMLphp. * Author: Pantheon * Author URI: https://pantheon.io * Plugin URI: https://wordpress.org/plugins/wp-saml-auth/ * Text Domain: wp-saml-auth * Domain Path: /languages * * @package Wp_Saml_Auth */
/**
* Provides default options for WP SAML Auth.
*
* @param mixed $value Configuration value.
* @param string $option_name Configuration option name.
*/
function wpsa_filter_option( $value, $option_name ) {
$defaults = array(
'connection_type' => 'simplesamlphp',
'simplesamlphp_autoload' => dirname( __FILE__ ) . '/simplesamlphp/lib/_autoload.php',
'auth_source' => 'wordpress-sp',
'internal_config' => array(),
'auto_provision' => true,
'permit_wp_login' => false,
'get_user_by' => 'login',
'user_login_attribute' => 'uid',
'user_email_attribute' => 'mail',
'display_name_attribute' => 'displayName',
'first_name_attribute' => 'sn',
'last_name_attribute' => 'givenName',
'default_role' => get_option( 'default_role' ),
);
$value = isset( $defaults[ $option_name ] ) ? $defaults[ $option_name ] : $value;
return $value;
}
add_filter( 'wp_saml_auth_option', 'wpsa_filter_option', 0, 2 );
if ( ! defined( 'WP_SAML_AUTH_AUTOLOADER' ) ) {
define( 'WP_SAML_AUTH_AUTOLOADER', __DIR__ . '/vendor/autoload.php' );
}
require_once dirname( __FILE__ ) . '/inc/class-wp-saml-auth.php';
WP_SAML_Auth::get_instance();
if ( defined( 'WP_CLI' ) && WP_CLI ) {
require_once dirname( __FILE__ ) . '/inc/class-wp-saml-auth-cli.php';
WP_CLI::add_command( 'saml-auth', 'WP_SAML_Auth_CLI' );
}
変更箇所について説明します。
connection_type | 実際にSAML認証を行うライブラリを選択できます。今回はsimplesamlphpを使って行きます。 |
auth_source | simplesamlphpで使用するAuthenticationSourceを入力します。 |
internal_config | 使わないので削除します。 |
auto_provision | 認証時に動的にユーザ作成を行うか設定します。 |
permit_wp_login | SAML認証の他に従来のID,Passwordの認証を有効にするか設定します。 |
get_user_by | ユーザを識別する要素を選択します。"login"か"email"が選択できます。 |
user_login_attribute | ログインIDに使うSAMLのattributeを指定します。 |
user_email_attribute | メール情報に使うSAMLのattributeを指定します。 |
display_name_attribute | 表示名に使うSAMLのattributeを指定します。 |
first_name_attribute | 氏名(姓)に使うSAMLのattributeを指定します。 |
last_name_attribute | 氏名(名)に使うSAMLのattributeを指定します。 |
※各オプションの詳細についてはプラグインの公式サイトを参照下さい。
「ファイルを更新」ボタンを押すと設定を保存します。
次のようなエラーが表示されますが、これはSimpleSAMLphpの設定が済んでいない場合に表示されます。
ここでは無視して下さい。
SimpleSAMLphp導入
過去に紹介した『SimpleSAMLphpを使ってSAMLに対応したサイトを作ろう』を参照しながら導入作業を進めます。
ここからはWordPressを構築しているサーバーへSSHでログインし作業します。
手順「1. 環境設定」から、手順「2. SimpleSAMLphpのインストール」まで進めて下さい。
手順完了後
/var/www/配下にダウンロードしてきたSimpleSAMLphpの配置まで終了しています。
手順「3. SimpleSAMLphpの初期設定」で"/etc/httpd/conf.d/simplesamlphp.conf"を作成した後は
wordpressを構築した際にapacheを動かしていると思うので、apacheの起動ではなく再起動をします。
# systemctl restart httpd
手順完了後
ファイアーウォールの設定は必要な場合に設定して下さい。
手順「4. SeciossLinkの設定」のSAML SP登録
今回はこのように設定しました。
サービスID | wordpress |
サービス名 | wordpress |
エンティティID | wordpress |
Assertion Consumer Service | https://ドメイン/simplesaml/module.php/saml/sp/saml2-acs.php/wordpress-sp |
ログアウトURL | https://ドメイン/wp-login.php?action=logout |
アクセス先URL | https://ドメイン/wp-admin/ |
ユーザIDの属性 | ユーザID |
送信する属性 | ・ユーザID ・ユーザID@テナント名 ・メールアドレス ・姓 ・名 ・別名 |
登録したSAML SPをユーザに割り当てます。
手順4が終了し手順5に入る前に、対象ユーザでSAML SPを利用できるようにアクセス権限の設定を行います。
左メニューから「アクセス権限」→「新規登録」をクリックし登録画面を表示します。
アクセス権限登録
アクセス権限 - 許可するユーザ - 設定
各設定値については弊社マニュアルのアクセス権限の管理を参照下さい。
手順「5. SimpleSAMLphpにSAML IdP追加」を行います。
作業完了後
手順6以降は確認作業ですので不要です。
最後にWordPressのプラグインにSimpleSAMLphpを認識させるため、シンボリックリンクを作成します。
# ln -s /var/www/simplesamlphp /var/www/wordpress/wp-content/plugins/wp-saml-auth/
手順完了後
お疲れ様でした。
これでSeciossLinkとSimpleSAMLphpの設定は終了です!
早速、SAML認証を試してみましょう。
確認
wordpressの管理ページへのログインを試みます。
いつものログインフォームの上にある「Sign In」のボタンがSAML認証ボタンです。
SeciossLinkでのユーザ認証(予め認証が済んでいる場合には表示されません)
ログイン後
WordPress側でユーザの作成をしていないにも関わらず、ユーザが作成されており、
SAML認証を使って無事ログインができました。
おまけ
ユーザ作成時の権限設定はwordpressの設定に依存します。
wordpress管理ページから「設定」をクリックします
一般設定の中の「新規ユーザーのデフォルト権限グループ」がそれに該当します。
ちなみに、ログインページのボタンはカスタムすることができます。
# vi /var/www/wordpress/wp-content/plugins/wp-saml-auth/inc/class-wp-saml-auth.php
echo の部分で出力しているhtmlタグをお好みで修正して下さい。
いかがでしたでしょうか。
手順が多く大変ですが、SAML認証できるサービスがまた一つ増えましたね。
今後共セシオスリンクをよろしくお願いいたします。
以上、セシオスサポートチームでした。