Shibboleth SPを使ってSAMLサービスプロバイダー(SAML SP)を構築し、SeciossLinkからシングルサインオンを行います。「SimpleSAMLphpを使ってSAMLに対応したサイトを作ろう」のShibboleth SP版となり、同様な流れで進めていきます。
・今回は、CentOS 7.5の環境で行います。
・使用するSeciossLinkの環境は、“slinkdev.secioss.net”です。
※本番を使う場合、”slink.secioss.com”に読み替えてください。
・使用するSeciossLinkのテナントIDは、“example.com”です。
※SeciossLinkのテナントIDも、適宜読み替えてください。
・使用するShibboleth SPのサーバホスト名を、“shibsp.example.com”とします。
※Shibboleth SPのサーバホスト名も、適宜読み替えてください。
Shibboleth SPに必要なパッケージをインストールします。
※PHPは、SAML SP化した独自Webサイトのページ作成に使用するのでインストールしておきます。
| # yum install httpd# yum install mod_ssl# yum install php | 
面倒なのでSELinuxも無効化しておきましょう。
| # setenforce 0 | 
(再起動後も無効にする場合は、/etc/selinux/configも書き換えてください。)
Shibboleth用のrepositoryファイルをダウンロードし、Shibboleth SPはyumでインストールします。
本稿執筆時点(2018/05/29)では shibboleth-sp 2.6.1 が最新でした。
| # wget http://download.opensuse.org/repositories/security:/shibboleth/CentOS_7/security:shibboleth.repo# cp security\:shibboleth.repo /etc/yum.repos.d/shibboleth.repo# yum install shibboleth | 
設定の前に、まず連携するSeciossLinkのメタデータを取得するところから進めていきましょう。
ブラウザでアクセスしてメタデータファイルをダウンロードできますが、サーバに配置するのでShibboleth SP上で取得します。
取得したメタデータは、/etc/shibboleth配下に置いておきます。
| # wget https://slinkdev.secioss.net/saml/metadata.php?tenant=example.com# mv metadata.php\?tenant\=example.com /etc/shibboleth/slink-metadata.xml | 
※取得元URLの最後のexample.comはテナントIDです。
※wgetで取得すると「metadata.php?tenant=example.com」といったファイル名になるので、リネームします。
ここからShibboleth SPの設定ファイルを編集していきます。
※行番号も付けているので、編集個所を探すときの目安にしてください。
/etc/shibboleth/shibboleth2.xmlを編集します。
任意の文字列で良いのですが、Shibboleth SPの標準的な設定値としてURL形式とします。
また、最後に「-sp」を付けます。
| 22    <!-- The ApplicationDefaults element is where most of Shibboleth's SAML bits are defined. -->23    <ApplicationDefaults entityID="https://shibsp.example.com/shibboleth-sp"24                                REMOTE_USER="eppn persistent-id targeted-id"> | 
/etc/shibboleth/shibboleth2.xmlを編集します。
SeciossLinkから取得したメタデータのentityIDの値をここに設定します。
| 44    <SSO entityID="https://slinkdev.secioss.net/example.com"45          discoveryProtocol="SAMLDS" discoveryURL="https://ds.example.org/DS/WAYF">46       SAML2 SAML147     </SSO> | 
/etc/shibboleth/shibboleth2.xmlを編集します。
/etc/shibboleth配下に配置した「slink-metadata.xml」を参照するように設定します。
メタデータファイルを参照する設定がコメントアウトされているので、コメントを解除して配置したファイル名に修正します。
| 87    <!-- Example of locally maintained metadata. -->88    <!-- -->89    <MetadataProvider type="XML" validate="true" file="slink-metadata.xml"/>90    <!-- --> | 
/etc/shibboleth/attribute-map.xmlを編集します。
Shibboleth SPのデフォルト設定をそのまま使用するとShibboleth独自のフォーマットとなってしまいSeciossLinkで設定したユーザIDだけの値でなくなってしまいます。そこで、フォーマットを変更します。
| 57    <Attribute name="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent" id="persistent-id">58        <AttributeDecoder xsi:type="NameIDAttributeDecoder" formatter="$Name" defaultQualifiers="true"/>59    </Attribute> | 
/etc/httpd/conf.d/shib.confを編集します。
本稿では、デフォルトで設定されている“/secure”を独自Webサイトとして使用します。
そのまま使用するので特に編集はしませんが、以下のような設定となります。
“/secure”のパスを変更、または別のパスで同様な設定を追加することで、そのパスに対してもShibboleth SPによるSAMLの認証が有効になります。
| 49    <Location /secure>50        AuthType shibboleth51        ShibRequestSetting requireSession 152        require shib-session53    </Location> | 
既にhttpdを起動している場合は再起動を行って内容を反映させます。
(起動していない場合は、起動させます。)
また、shibdも同様に再起動、または起動を行ってください。
| # systemctl restart httpd# systemctl restart shibd | 
ファイアーウォールを設定している場合は、通信を許可しておきましょう。
| # firewall-cmd --permanent --zone=public --add-service=https# firewall-cmd --reload | 
管理画面からの設定となりますが、まずShibboleth SPのメタデータの取得から進めていきましょう。
SeciossLinkのメタデータをShibboleth SPに設定したのとは違い、SeciossLinkには管理画面(ブラウザ)を使うので、wgetではなくブラウザでダウンロードします。
それでは下記URLにアクセスし、メタデータファイルをダウンロードしましょう。
https://shibsp.example.com/Shibboleth.sso/Metadata
SeciossLinkの管理画面にログインし、SAML SPの新規登録を行います。
サービスプロバイダ登録画面を開き、取得したShibboleth SPのメタデータから自動設定します。
以下の図にある①参照…ボタンよりメタデータを選択し、②読み込むボタンで自動設定します。
自動設定後、まだサービスIDとサービス名が未設定なので、任意のIDと名前を設定してください。
本稿では、サービスIDの入力欄に“shibsp”、サービス名の入力欄に“ShibbolethSP”を設定しています。
また、SeciossLinkのポータルからアクセスできるようにアクセス先URLにサンプルページのURLを設定します。
設定したURLは、“https://shibsp.example.com/secure/index.php”となってます。
登録したSAML SP(Shibboleth SP)をユーザーに割り当てます。
独自Webサイトのページを作成して、アクセスしてみましょう。
/var/www/html配下にsecureディレクトリを作成します。
(Shibboleth SPを使ったSAMLの認証が“/secure”に対して有効となる設定をしているので)
| # mkdir /var/www/html/secure | 
/var/www/html/secure配下にindex.phpファイルを作成します。
| # vi /var/www/html/secure/index.php | 
サンプルとしては、phpinfo()を出力するページでも良いですが、過去の投稿にある「SimpleSAMLphpを使ってSAMLに対応したサイトを作ろう」の手順にある、ユーザID のみが表示される独自Webサイト用のページを作成します。
以下の内容で作成します。
| 01    <html>02    <body>03        <h1>こんにちは <?php echo $_SERVER['REMOTE_USER']; ?> さん</h1>04    </body>05    </html> | 
※参考までに、以下のようにphpinfo出力のページを作成すると環境変数の一覧が参照できます。
| 01    <?php02            phpinfo();05    ?> | 
ブラウザで下記のURLにアクセスしてください。
https://shibsp.example.com/secure/index.php
SeciossLinkのログイン画面にリダイレクトされます。
認証が正しく行われると、以下のようにユーザIDが表示されたページにアクセスできます。
長々とお疲れ様でした。如何でしたでしょうか?
最小限での設定だったと思いますが、SimpleSAMLphpと同様にShibboleth SPを使っても
簡単にSAML対応のWebサイトが構築できたかと思います。
以下は、参考までにShibbolethの情報があるサイトとなっています。
基本的な設定であれば、日本語で説明がある学認の技術サイトが分かりやすくお勧めです。
Shibboleth SP WIKI:
https://wiki.shibboleth.net/confluence/display/SP3/Home
学認技術サイト:
https://www.gakunin.jp/technical/
| SeciossLinkは、Shibboleth SPを使って構築したSAMLサービスプロバイダー(SAML SP)とシングルサインオン連携が可能です。ユーザーが安全にサービスプロバイダーへアクセスできるため、ぜひ一度お試しください。 
 |