2018/03/14
SimpleSAMLphpを使ってSAMLサービスプロバイダー(SAML SP)を構築し、SeciossLinkからシングルサインオンをする
CentOS 7.4のインストールと初期設定が完了していること
SeciossLink検証環境の申し込みが完了していること
(もちろん本契約しているSeciossLinkテナントでも大丈夫です)
※ 本番環境の場合は、適宜 ホスト名を“slinkdev.secioss.net”から”slink.secioss.com”に読み替えてください。
※ 本稿で使用しているSeciossLinkのテナントIDをexample.comです。こちらも適宜読み替えてください。
まず、SimpleSAMLphpに必要なパッケージをインストールします。
# yum install httpd
# yum install mod_ssl # yum install php # yum install php-mbstring # yum install php-xml |
面倒なのでSELinuxも無効化しておきましょう。
# setenforce 0 |
(再起動後も無効にする場合は、/etc/selinux/configも書き換えてください。)
SimpleSAMLphpのホームページからパッケージをダウンロードしてインストールします。
本稿執筆時点(2018/03/07)では simplesamlphp-1.15.4.tar.gz が最新でした。
別のバージョンを使う場合は適宜読み替えてください。
# wget --content-disposition https://simplesamlphp.org/download?latest
# tar xvzf simplesamlphp-1.15.4.tar.gz # mv simplesamlphp-1.15.4 /var/www/simplesamlphp |
SimpleSAMLphpの管理者ユーザーのパスワードを設定します。
任意のパスワードに変更してください。
/var/www/simplesamlphp/config/config.php
'auth.adminpassword' => '123', |
httpdにSimpleSAMLphpようの設定ファイルを追加します。
/etc/httpd/conf.d/simplesamlphp.conf
Alias /simplesaml /var/www/simplesamlphp/www
<Directory /var/www/simplesamlphp/www> Require all granted </Directory> |
httpdを起動します。
# systemctl start httpd |
ファイアーウォールを設定している場合は、通信を許可しておきましょう。
# firewall-cmd --permanent --zone=public --add-service=https
# firewall-cmd --reload |
SeciossLinkの管理画面にログインし、SAML SPの新規登録を行います。
SAML SPを登録します。
項目名 |
設定値 |
サービスID | simplesaml
※ 任意の値でOK |
サービス名 | simplesaml
※ 任意の値でOK |
エンティティID | https://simplesaml.example.com
※ SAML SPのエンティティIDです。後で使います。設定値は任意の値でOKです。 |
Assertion Consumer Service | https://<<SAML SPのホスト名またはIP>>/simplesaml/module.php/saml/sp/saml2-acs.php/slink-sp |
ログアウトURL | https://<<SAML SPのホスト名またはIP>>/simplesaml/module.php/saml/sp/saml2-logout.php/slink-sp |
アクセス先URL | https://<<SAML SPのホスト名またはIP>>/simplesaml/module.php/core/authenticate.php?as=slink-sp |
IDの属性 | urn:oasis:names:tc:SAML:2.0:nameid-format:persistent |
登録したSAML SPをユーザーに割り当てます。
SimpleSAMLphpにSAML IDプロバイダー(SAML IdP)を追加します。
まず、SeciossLinkのメタデータをダウンロードします。
ブラウザなどで 下記URLにアクセスし、メタデータファイルをダウンロードしてください。
https://slinkdev.secioss.net/saml/metadata.php?tenant=example.com
※ 最後のexample.comはテナントIDです。
ダウンロードしたメタデータファイルを見ながらSimpleSAMLphpのメタデータに追記を行います。
/var/www/simplesamlphp/metadata/saml20-idp-remote.php
$metadata['https://slinkdev.secioss.net/example.com'] = array (
'entityid' => 'https://slinkdev.secioss.net/example.com', 'description' => array ('en' => '',), 'OrganizationName' => array ('en' => '',), 'name' => array ('en' => '',), 'OrganizationDisplayName' => array ('en' => '',), 'url' => array ('en' => '',), 'OrganizationURL' => array ('en' => '',), 'contacts' => array (0 => array ('contactType' => 'technical', 'surName' => 'Administrator', 'emailAddress' => array (0 => 'admin@secioss.co.jp',),),), 'metadata-set' => 'saml20-idp-remote', 'SingleSignOnService' => array (0 => array ('Binding' => 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect', 'Location' => 'https://slinkdev.secioss.net/saml/saml2/idp/SSOService.php',),), 'SingleLogoutService' => array (0 => array ('Binding' => 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect', 'Location' => 'https://slinkdev.secioss.net/saml/saml2/idp/SingleLogoutService.php',),), 'ArtifactResolutionService' => array (), 'NameIDFormats' => array (0 => 'urn:oasis:names:tc:SAML:2.0:nameid-format:transient',), 'keys' => array (0 => array ('encryption' => false, 'signing' => true, 'type' => 'X509Certificate', 'X509Certificate' => 'MIIDtTCCAp2gAwIBAgIJ………JpxhEtrnWMo=',),), ); |
長いですが、書き換えが必要な個所は3か所だけです。
まず、entityidを2か所置き換えます。SeciossLinkのメタデータに記述されているentityIDに書き換えます。
サンプルでは’https://slinkdev.secioss.net/example.com’
次にX509CertificateをSeciossLinkのメタデータに記述されている証明書に書き換えます。
サンプルでは’MIIDtTCCAp2gAwIBAgIJ………JpxhEtrnWMo=’
SAML IdPの設定を追加します。
/var/www/simplesamlphp/config/authsources.php
'slink-sp' => array(
'saml:SP', 'entityID' => 'https://simplesaml.example.com', 'idp' => 'https://slinkdev.secioss.net/example.com', 'discoURL' => null, ), |
entityIDにはSeciossLinkの管理画面で設定したエンティティIDを設定します。
idpにはSeciossLinkのentityIDを設定します。
SimpleSAMLphpのDEMOサイトにアクセスしてみましょう。
ブラウザで下記のURLにアクセスしてください。
https://<<SAML SPのホスト名またはIP>>/simplesaml/module.php/core/authenticate.php?as=slink-sp
SeciossLinkのログイン画面にリダイレクトされます。
SeciossLinkでログインするとSimpleSAMLphpのデモ画面にリダイレクトします。
SeciossLinkで認証したユーザー情報が含まれているのが確認できます。
では、次に独自Webサイトを作ってSAMLでシングルサインオンしてみましょう。
/var/www/html/index.php
<?php
require_once('/var/www/simplesamlphp/lib/_autoload.php'); use SimpleSAML\Auth\Simple; $as = new Simple('slink-sp'); $as->requireAuth(); $name=$as->getAuthData("saml:sp:NameID"); ?> <html> <body> <h1>こんにちは <?php echo $name->value; ?> さん</h1> <body> </html> |
ブラウザで下記URLにアクセスするとこんな感じに表示されます。
https://<<SAML SPのホスト名またはIP>>/
このようにSimpleSAMLphpを使うと簡単にSAML対応のWebサイトを構築できます。
それではまた。