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

schedule 2018/06/01  refresh 2024/02/01

やりたいこと

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のサーバホスト名も、適宜読み替えてください。

 

手順

1. 環境設定

 

Shibboleth SPに必要なパッケージをインストールします。
※PHPは、SAML SP化した独自Webサイトのページ作成に使用するのでインストールしておきます。

 

# yum install httpd
# yum install mod_ssl
# yum install php

 

面倒なのでSELinuxも無効化しておきましょう。

 

# setenforce 0

(再起動後も無効にする場合は、/etc/selinux/configも書き換えてください。)

 

2. Shibboleth SPのインストール

 

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

 

 

3. Shibboleth SPの設定

 

設定の前に、まず連携するSeciossLinkのメタデータを取得するところから進めていきましょう。

 

・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の設定ファイルを編集していきます。
※行番号も付けているので、編集個所を探すときの目安にしてください。

 

・SPのentityID設定

 

/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">

 

・SeciossLinkのentityID設定

 

/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 SAML1
47     </SSO>

 

・SeciossLinkのメタデータ設定

 

/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    <!-- -->

 

・NameIDのフォーマットを変更

 

/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>

 

・SAMLを使った認証を行うWebサイト登録

 

/etc/httpd/conf.d/shib.confを編集します。
本稿では、デフォルトで設定されている“/secure”を独自Webサイトとして使用します。
そのまま使用するので特に編集はしませんが、以下のような設定となります。
“/secure”のパスを変更、または別のパスで同様な設定を追加することで、そのパスに対してもShibboleth SPによるSAMLの認証が有効になります。

 

49    <Location /secure>
50        AuthType shibboleth
51        ShibRequestSetting requireSession 1
52        require shib-session
53    </Location>

 

・設定の反映

 

既にhttpdを起動している場合は再起動を行って内容を反映させます。
(起動していない場合は、起動させます。)


また、shibdも同様に再起動、または起動を行ってください。

 

# systemctl restart httpd
# systemctl restart shibd

 

ファイアーウォールを設定している場合は、通信を許可しておきましょう。

# firewall-cmd --permanent --zone=public --add-service=https
# firewall-cmd --reload

 

 

4. SeciossLinkの設定 

 

管理画面からの設定となりますが、まずShibboleth SPのメタデータの取得から進めていきましょう。

 

・Shibboleth SPのメタデータ取得

 

SeciossLinkのメタデータをShibboleth SPに設定したのとは違い、SeciossLinkには管理画面(ブラウザ)を使うので、wgetではなくブラウザでダウンロードします。
それでは下記URLにアクセスし、メタデータファイルをダウンロードしましょう。
https://shibsp.example.com/Shibboleth.sso/Metadata

 

・SAML SP登録

 

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)をユーザーに割り当てます。

 

 

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

 

独自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    <?php
02            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)とシングルサインオン連携が可能です。

ユーザーが安全にサービスプロバイダーへアクセスできるため、ぜひ一度お試しください。