ブログ記事

SimpleSAMLphpを使ってSAMLに対応したサイトを作ろう

2018/03/14

やりたいこと

SimpleSAMLphpを使ってSAMLサービスプロバイダー(SAML SP)を構築し、SeciossLinkからシングルサインオンをする

 

前提

CentOS 7.4のインストールと初期設定が完了していること

SeciossLink検証環境の申し込みが完了していること
(もちろん本契約しているSeciossLinkテナントでも大丈夫です)

※   本番環境の場合は、適宜 ホスト名を“slinkdev.secioss.net”から”slink.secioss.com”に読み替えてください。

※   本稿で使用しているSeciossLinkのテナントIDをexample.comです。こちらも適宜読み替えてください。

 

手順

1. 環境設定

まず、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も書き換えてください。)

 

 

2. SimpleSAMLphpのインストール

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

 

3. 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

 

 

4. SeciossLinkの設定

SeciossLinkの管理画面にログインし、SAML SPの新規登録を行います。

SimpleSAMLphpを使ってSAMLに対応したサイトを作ろう-1

SAML SPを登録します。

SimpleSAMLphpを使ってSAMLに対応したサイトを作ろう-2

項目名

設定値

サービス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に対応したサイトを作ろう-3

 

5. SimpleSAMLphpにSAML IdP追加

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を設定します。

 

 

6. DEMOサイトにアクセスしてみよう

SimpleSAMLphpのDEMOサイトにアクセスしてみましょう。

ブラウザで下記のURLにアクセスしてください。

https://<<SAML SPのホスト名またはIP>>/simplesaml/module.php/core/authenticate.php?as=slink-sp

 

SeciossLinkのログイン画面にリダイレクトされます。

SimpleSAMLphpを使ってSAMLに対応したサイトを作ろう-4

 

SeciossLinkでログインするとSimpleSAMLphpのデモ画面にリダイレクトします。

SimpleSAMLphpを使ってSAMLに対応したサイトを作ろう-5

SeciossLinkで認証したユーザー情報が含まれているのが確認できます。

 

 

7. 独自WebサイトでSAML認証してみよう

では、次に独自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に対応したサイトを作ろう-6

 

このようにSimpleSAMLphpを使うと簡単にSAML対応のWebサイトを構築できます。

 

それではまた。

 

最新記事

カテゴリ

アーカイブ

%d人のブロガーが「いいね」をつけました。