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)とシングルサインオン連携が可能です。ユーザーが安全にサービスプロバイダーへアクセスできるため、ぜひ一度お試しください。
|