SimpleSAMLphpを利用してSAML認証をセットアップする手順 #1
この記事では、SimpleSAMLphpを利用してSAML認証をセットアップする手順について紹介します。
はじめに
Webでよく使われる認証の仕組みに SAML や OpenID Connect というものがありまして、これらを使ってシングルサインオンのWebアプリケーションを作ることができます。
そして、こういったWebアプリケーションの開発ではテスト用の認証サーバがあると便利です。
今回は SimpleSAMLphp を利用してSAML認証をセットアップしてみようと思います。
全体像
認証サービスを提供するサーバを「アイデンティティプロバイダ」、アプリケーションを提供するサーバを「サービスプロバイダ」と呼びます。
このセットアップはプライベートネットワークで行います。接続関係は下図のような感じですね。
大まかな処理の流れとしては
- PCからSPのサービスへアクセスする
- IdPへリダイレクトされる
- IdPで認証をパスする
- SPのサービスが使えるようになる
といった流れを考えていまして、これができるように進めていきます。
セットアップ
事前にIdPサーバとSPサーバをUbuntu 20.04 Serverで用意しておきます。
IdPのホスト名は idp
に、SPのホスト名は sp
に設定しました。ちなみにSimpleSAMLphpは、IdPとしてもSPとしても使うことができるので、途中まで作業は共通になります。
それでは作業を見ていきましょう。
IdPとSPで共通の作業
公式ドキュメント SimpleSAMLphp Installation and Configuration に沿って作業します。
インストール
まず、前提で必要になるパッケージをインストールします。
sudo apt install apache2 php
sudo apt install php-intl php-json php-xml php-mbstring php-curl
それから、SimpleSAMLphpの圧縮ファイルをダウンロードして適当な場所に展開します。
コマンドとしては次のような感じです。
wget https://github.com/simplesamlphp/simplesamlphp/releases/download/v1.19.5/simplesamlphp-1.19.5.tar.gz
sudo mv simplesamlphp-1.19.5.tar.gz /var/www/
cd /var/wwww/
sudo tar xzf simplesamlphp-1.19.5.tar.gz
sudo mv simplesamlphp-1.19.5 simplesamlphp
続いて、SimpleSAMLphpのWebインターフェースにアクセスできるように設定していきます。
avahi-daemon
セットアップをプライベートネットワークで行う関係上、このままではIdPやSPのサーバに名前でアクセスできません。
名前でアクセスできるように avahi-daemon
をインストールします。
sudo apt install avahi-daemon
これでPCから idp.local
や sp.local
といった名前でアクセスできるようになりました。
ターミナルで ping idp.local
や ping sp.local
を実行し、応答を見てみると良いでしょう。
apache2のsslモジュール有効化
apache2のsslモジュールを有効化し、さらに対応する設定ファイルも有効化します。
sudo a2enmod ssl
sudo a2ensite default-ssl.conf
/etc/apache2/sites-enabled/default-ssl.conf
に書いてありますけれど、秘密鍵は /etc/ssl/private/ssl-cert-snakeoil.key
を、証明書は /etc/ssl/certs/ssl-cert-snakeoil.pem
を参照するようになっています。
確認すると仮のファイルが既にありますので、ここではそれを使うことにします。
apache2の設定ファイルを編集
/etc/apache2/sites-enabled/default-ssl.conf
に次の設定を追加します。
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
中略
+ SetEnv SIMPLESAMLPHP_CONFIG_DIR /var/www/simplesamlphp/config
+ Alias /simplesaml /var/www/simplesamlphp/www
+ <Directory /var/www/simplesamlphp/www>
+ Require all granted
+ </Directory>
</VirtualHost>
</IfModule>
SimpleSAMLphpの設定ファイルを編集
SimpleSAMLphpインストールディレクトリの config/config.php
を編集します。
変更内容は次のような感じです。
+ 'timezone' => 'Asia/Tokyo',
- 'timezone' => null,
+ 'secretsalt' => 'secretsalt',
- 'secretsalt' => 'defaultsecretsalt',
+ 'auth.adminpassword' => 'password',
- 'auth.adminpassword' => '123',
+ 'language.default' => 'ja',
- 'language.default' => 'en',
IdPとSPで異なる作業
ここはIdPとSPで作業内容が異なるので注意して作業しましょう。
IdPの設定
IdPとして構成するため次のように設定します。
+ 'baseurlpath' => 'https://idp.local/simplesaml/',
- 'baseurlpath' => 'simplesaml/',
+ 'enable.saml20-idp' => true,
- 'enable.saml20-idp' => false,
+ 'exampleauth' => true,
- 'exampleauth' => false,
SPの設定
SPも同じく、SPとして構成するため次のように設定します。
+ 'baseurlpath' => 'https://sp.local/simplesaml/',
- 'baseurlpath' => 'simplesaml/',
セットアップの終わりに
両方のサーバとも、最後に忘れずapache2を再起動しておきます。
sudo systemctl restart apache2.service
動作確認
ブラウザで https://idp.local/simplesaml/
と https://sp.local/simplesaml/
にアクセスしてみましょう。
次のような画面が表示されたら成功です。
SimpleSAMLphp設定ページ【ようこそ】
最初にアクセスした際、ブラウザで「この接続ではプライバシーが保護されません」と警告されるかも知れません。
この場合、表示された画面の【詳細設定】から【idp.localにアクセスする(安全ではありません)】のように進めば良いです。
IdPの動作確認
IdPに関しては【設定】タブで次のように SAML 2.0 IdP
に緑のチェックが入っているのが見て取れると思います。
IdPのSimpleSAMLphp設定ページ【設定】
ユーザの作成
最後に、IdPでテスト用のユーザを作成しておきましょう。
ユーザの作成と言っても難しいことはなくて、 config/authsources.php
で次のコメント箇所をコメント解除するだけです。
- /*
'example-userpass' => [
'exampleauth:UserPass',
// Give the user an option to save their username for future login attempts
// And when enabled, what should the default be, to save the username or not
//'remember.username.enabled' => false,
//'remember.username.checked' => false,
'student:studentpass' => [
'uid' => ['test'],
'eduPersonAffiliation' => ['member', 'student'],
],
'employee:employeepass' => [
'uid' => ['employee'],
'eduPersonAffiliation' => ['member', 'employee'],
],
],
- */
ユーザ名「student」でパスワード「studentpass」のアカウントと、ユーザ名「employee」でパスワード「employeepass」のアカウントが有効になります。
おわりに
少し長くなってしまったので、続きは次回に書きます。
次回はIdPとSPの間で信頼関係を結ぶための作業を行い、さらにSPで認証できることを確かめます。
SimpleSAMLphpを利用してSAML認証をセットアップする手順について紹介しました。どなたかのお役に立てば幸いです。
Discussion