Shibboleth
Shibbolethとは
Shibbolethは、コンピュータネットワークおよびインターネット向けのシングルサインオンによるログインシステムです。異なる組織や機関からなるフェデレーションが運営するさまざまなシステムに、1つのアイデンティティだけでログインできます。フェデレーションは、多くの場合、大学や公共サービス機関です。
Shibbolethは、Internet2コンソーシアムが作成した、SAMLに基づくフェデレーテッドアイデンティティベースの認証および認可インフラストラクチャのためのミドルウェアアーキテクチャおよびオープンソース実装です。フェデレーテッドアイデンティティにより、あるセキュリティドメインのユーザに関する情報を、共通のフェデレーション内の他の組織に提供できます。これにより、ドメインをまたがるシングルサインオンが可能になり、コンテンツプロバイダがユーザ名とパスワードを管理する必要がなくなります。アイデンティティプロバイダ(IdP)はユーザ情報を提供し、サービスプロバイダ(SP)はこの情報を利用して、保護されたコンテンツへのアクセスを制御します。
主なShibbolethフェデレーション
UK Access Management Federation for Education and Research
英国では、BectaとJISCが、シングルサインオンを提供するために、Shibbolethを使用した教育フェデレーションUK Access Management Federation for Education and Researchを導入しています。つまり、Moodleを使用している英国の教育機関は、組織がUK Access Management Federationに参加し、ユーザのアイデンティティがLA/RBCの使用するアイデンティティプロバイダに保持されていれば、Shibboleth経由でユーザを認証できるはずです。イングランドおよびウェールズの公立学校の場合、これはおそらく地方自治体(Local Authority)または地域ブロードバンドコンソーシアム(RBC)に連絡することを意味します。現在の英国フェデレーションのメンバ一覧はこちらにあります。
Swiss Authentication and Authorization Infrastructure (SWITCHaai)
スイスでは、SWITCH財団がSwiss Authentication and Authorization Infrastructure (SWITCHaai)というフェデレーションを運営しています。このフェデレーションには、約160の機関と、Switch edu-IDによるスイスに住むすべての人を対象としたユニバーサルログイン(約90万人のユーザ)が含まれます。
auth/shibboleth/README.txt
Moodleディストリビューションに含まれるauth/shibboleth/README.txtファイルの内容です:
Moodle用Shibboleth認証
-------------------------------------------------------------------------------
要件:
- Shibboleth Service Provider 1.3以降。2.1以降を推奨します。
Shibbolethのセットアップ方法については、所属するShibbolethフェデレーションの
ドキュメントをご覧ください。
変更履歴:
- 11. 2004: Markus Hagmanが作成
- 05. 2005: Martin Dougiamasがログイン処理を修正
- 05. 2005: Lukas Haemmerleがさまざまな拡張および修正を実施
- 06. 2005: Martin LanghoffおよびLukas Haemmerleが新しいフィールドロックおよび
プラグイン設定構造に対応
- 10. 2005: エラーメッセージを改善し、テキストを言語ディレクトリに移動
- 02. 2006: 認可が正しく機能するよう認証を簡素化
IIS向けの手順を追加
- 11. 2006: Moodle 1.7以降、ユーザケイパビリティが正しく読み込まれるよう変更
- 03. 2007: 認証方法をMoodle 1.8に対応
- 07. 2007: 大文字のユーザ名で問題が発生するバグを修正
- 10. 2007: Markus Hagmanの要望により、メールアドレス、姓および名の属性を
必須から除外
- 11. 2007: WAYFサービスをMoodleに統合
- 12. 2008: Shibboleth 2.xおよびシングルログアウトのサポートを追加
- 1. 2008: ログアウトフックを追加し、Shibbolethの設定文字列をUTF-8の認証
言語ファイルに移動
- 3. 2009: テュービンゲン大学のIna M�llerおよびワシントン大学のPeter Ellisから
報告されたさまざまな改善およびバグ修正を追加
- 4. 2009: コールバックスクリプトに関するログアウトの要件を追加
- 6. 2009: 統合ディスカバリサービス使用時のハンドラURLを変更
- 10. 2009: Shibboleth設定でのHTMLエンティティの保持を修正
デュアルログインを使用するMoodleの設定
-------------------------------------------------------------------------------
1. moodle/auth/shibboleth/index.phpディレクトリをShibbolethで保護します。
このディレクトリのindex.phpページが、実際にShibbolethユーザをログインさせます。
Apacheの場合、Apacheの設定に次のようなルールを定義する必要があります:
--
<Directory /path/to/moodle/auth/shibboleth/index.php>
AuthType shibboleth
ShibRequireSession On
require valid-user
</Directory>
--
Moodleへのアクセスを制限するには、アクセスルール「require valid-user」を、
必要に応じたもの(例:「require affiliation student」)に置き換えます。
IISの場合、Shibboleth設定ファイル(shibboleth.xmlまたはshibboleth2.xml)の
RequestMapで、auth/shibbolethディレクトリを直接保護する必要があります。
--
<Path name="moodle" requireSession="false" >
<Path name="auth/shibboleth/index.php" requireSession="true" >
<AccessControl>
...
</AccessControl>
</Path>
</Path>
--
参考:
https://wiki.shibboleth.net/confluence/display/SHIB2/NativeSPRequestMapper および
https://wiki.shibboleth.net/confluence/display/SHIB2/NativeSPAccessControl
2. Moodle管理者として「管理 > ユーザ > 認証」に移動し、「Shibboleth」の
設定をクリックします。
3. フォームの各フィールドに入力します。「ユーザ名」「名」「姓」などのフィールドには、
対応するMoodleの変数にマッピングしたいShibboleth属性の環境変数名を入力します
(例:人の姓には「Shib-Person-surname」。利用可能な属性については、
Shibbolethのドキュメント、または所属するShibbolethフェデレーションの
ドキュメントを参照してください)。
特に「ユーザ名」フィールドは非常に重要です。この属性が、Shibbolethユーザの
Moodle認証に使用されるためです。
#############################################################################
Moodleが必要とするShibboleth属性:
Moodleが正しく動作するには、Shibbolethが少なくとも、Moodleでユーザ名として
使用される属性を提供する必要があります。この属性は、すべてのShibbolethで
一意である必要があります。
Moodleはユーザ名を小文字に変換することに注意してください。そのため、ユーザ名は
全体として大文字と小文字を区別しない動作になります。
Moodleで使用するすべての属性は、一定の長さに収まっている必要があります。そうでない
場合、Moodleは末尾を切り捨てます。ユーザプロファイルの各フィールドの最大長に
ついては、Moodleのドキュメントを参照してください。
#############################################################################
4.a 外部のWhere Are You From(WAYF)サービスを使用し、Shibbolethを唯一の認証方法に
する場合は、「管理 > ユーザ > 認証オプション」の「共通設定」にある
「代替ログインURL」に、ファイル「moodle/auth/shibboleth/index.php」のURLを
設定します。
これにより、Shibbolethログインが強制されます。
4.b Moodle統合WAYFサービスを使用する場合は、MoodleのShibboleth認証設定で
「Moodle WAYFサービス」チェックボックスをオンにして有効にし、
「アイデンティティプロバイダ」テキストエリアに、エンティティIDのリストを、
名前および任意のSessionInitiator URLとともに入力する必要があります。
SessionInitiator URLは通常、同じホストを指す絶対URLまたは相対URLです。
SessionInitiator URLを指定しない場合は、デフォルトの「/Shibboleth.sso」
(Shibboleth 1.3.xでのみ機能)が使用されます。Shibboleth 2.xの場合は、
SessionInitiatorとして「/Shibboleth.sso/DS」を追加する必要があります。
参考:https://wiki.shibboleth.net/confluence/display/SHIB/SessionInitiator
および https://wiki.shibboleth.net/confluence/display/SHIB2/NativeSPSessionInitiator
重要:以前のバージョンのMoodleからアップグレードし、統合WAYFを使用したい場合は、
ステップ1でmoodle/auth/shibboleth/内のindex.phpスクリプトのみが
保護され、他のスクリプト、特にlogin.phpスクリプトは保護*されていない*
ことを確認する必要があります。
Shibboleth 1.3ですでに統合WAYFを使用していた場合、Moodleを更新した後に
統合WAYFが機能しなくなることがあります。これは、暗黙的に設定されるデフォルトの
SessionInitiatorが、MoodleとShibbolethの両方で変更されたためです。そのため、
Shibboleth 1.3では3番目のパラメータとして/Shibboleth.ssoを追加する必要が
ありますが、Shibboleth 2.xではこれが/Shibboleth.sso/DSになります。
5. 「Shibboleth設定」の変更を保存します。
重要:4.b(統合WAYFサービス)を選択した場合、設定を保存すると、
Moodleの代替ログインURLがMoodleのウェブルートURLで上書きされます。
6. 4.bの統合WAYFサービスを使用せずに、別の認証方法に加えてShibbolethを使用する
場合は、「管理 > ユーザ > 認証管理」の「インストラクション」を変更して、
Shibbolethで保護され(ステップ1を参照)、Shibbolethのログイン処理を開始する
moodle/auth/shibboleth/index.phpファイルへのリンクを含めます。
このフィールドにはHTMLコードも使用できます。例えば、Shibbolethログインボタン
として画像を含めることができます。
注:現在のところ、デュアルログインを、Moodleが提供する統合WAYFサービス(4.b)と
一緒に使用することはできません。
7. 認証の変更を保存します。
Shibboleth認証の仕組み
--------------------------------------------------------------------------------
ShibbolethでMoodleに認証されるには、基本的に、ユーザがShibbolethで保護されたページ
/auth/shibboleth/index.phpにアクセスする必要があります。Shibbolethが唯一の認証
方法である場合(4.aを参照)、ユーザがMoodle WAYFサービスで自分の所属組織を
選択したとき、または代替ログインURLが保護された/auth/shibboleth/index.phpに
設定されている場合に、これが自動的に行われます。
それ以外の場合、ユーザはステップ5.bで用意したデュアルログインページのリンクを
クリックする必要があります。
Moodleは基本的に、ユーザ名としてマッピングしたShibboleth属性が存在するかどうかを
確認します。この属性は、ユーザがShibbolethで認証されている場合にのみ存在する
はずです。
ユーザのMoodleアカウントがまだ存在しない場合は、自動的に作成されます。
すべてのShibbolethユーザがMoodleサイトにアクセスできてしまうことを防ぐには、
ウェブサーバの設定(ステップ1を参照)の「require valid-user」の行を、特定の
ユーザのみを許可するよう変更する必要があります。ステップ1で何らかの認可ルールを
定義した場合、それらはShibboleth自体によってチェックされます。これらのルールを
満たしたユーザのみが、実際に/auth/shibboleth/index.phpにアクセスしてログイン
できます。
Shibbolethと別の認証方法を併用できます(手動ログインでテスト済み)。そのため、
Shibbolethログインを持たないユーザが少数いる場合は、そのユーザ用に手動アカウント
を作成し、手動ログインを使用してもらうことができます。他の認証方法の場合は、
まずそれらを設定してから、Shibbolethを認証方法として設定する必要があります。
ユーザは、Moodleに2つのアカウントを持っていない限り、1つの認証方法でのみ
ログインできます。
カスタムログインページを使用したShibbolethデュアルログイン
--------------------------------------------------------------------------------
ニーズにより合ったデュアルログインページを作成できます。そのためには、2つの
認証方法(例:「手動アカウント」と「Shibboleth」)を設定し、独自のデュアル
ログインページへの代替ログインリンクを指定する必要があります。そのページには
基本的に、Shibbolethログイン用のShibbolethで保護されたページ
(「/auth/shibboleth/index.php」)へのリンクと、「username」および「password」を
moodle/login/index.phpに送信するフォームが必要です。次に、このウェブページを
代替ログインページとして設定します。
詳細な手順および要件については、Moodleのドキュメントを参照してください。
MoodleでのShibbolethユーザデータの使用方法をカスタマイズする方法
--------------------------------------------------------------------------------
MoodleのShibboleth設定の中に、データ操作フックとして使用できるPHPファイルへの
パスを入力するフィールドがあります。
Shibboleth属性がMoodleで使用される方法をさらに加工したい場合に、これを使用でき
ます。セキュリティ上の理由から、このファイルを現在のサイトデータディレクトリ
($CFG->dataroot)内に置くことはできません。
例1:Shibbolethフェデレーションが、ユーザの優先言語を指定する属性を使用しているが、
この属性の内容がMoodleのデータ表現と互換性がない場合。例えば、
Shibboleth属性には「German」が入っているが、Moodleには「de」のような
2文字の値が必要な場合です。
例2:国、都市および番地が1つのShibboleth属性で提供され、これらの値をMoodleの
ユーザプロファイルで使用したい場合。この場合、対応する属性を解析して
ユーザフィールドに値を入れる必要があります。
このフックを使用するには、熟練したPHPプログラマである必要があります。ファイル
moodle/auth/shibboleth/auth.php、特にこのファイルがインクルードされている関数
「get_userinfo」を確認することを強く推奨します。
ファイルのコンテクストは、このログイン関数内と同じです。そのため、オブジェクト
$resultを直接編集できます。
ファイルの例:
--
<?php
// Set the zip code and the adress
if ($_SERVER[$this->config->field_map_address] != )
{
// $address contains something like 'SWITCH$Limmatquai 138$CH-8021 Zurich'
// We want to split this up to get:
// institution, street, zipcode, city and country
$address = $_SERVER[$this->config->field_map_address];
list($institution, $street, $zip_city) = explode('$', $address);
preg_match('/ (.+)/', $zip_city, $regs);
$city = $regs[1];
preg_match('/(.+)-/',$zip_city, $regs);
$country = $regs[1];
$result["address"] = $street;
$result["city"] = $city;
$result["country"] = $country;
$result["department"] = $institution;
$result["description"] = "I am a Shibboleth user";
}
?>
--
サービスプロバイダを2.xにアップグレードする方法
-------------------------------------------------------------------------------
サービスプロバイダ1.3.xを2.xにアップグレードする場合、バージョン2.0で属性の伝播に
関するデフォルトの動作が変更されたことに注意してください。
サービスプロバイダ1.3.xはShibboleth属性をHTTPリクエストヘッダとしてウェブサーバ
環境に公開していましたが、サービスプロバイダ2.xは属性を環境変数として公開します。
これにより、一部のプラットフォームではセキュリティが向上します。
ただし、この変更により属性名が変わります。
例えば、1.3.xでは姓の属性は「HTTP_SHIB_PERSON_SURNAME」として公開されていましたが、
この属性は$_SERVER['Shib-Person-surname']で、または/etc/shibboleth/attribute-map.xml
ファイルによっては単に$_SERVER['sn']で利用できるようになります。
Moodleは、どのShibboleth属性をどのMoodleユーザプロファイルフィールドにマッピング
するかを知る必要があるため、サービスプロバイダのアップグレード後には、マッピングも
更新されていることを確認する必要があります。
********************************************************************************
Moodleから自分自身を締め出してしまうおそれがあるため、サービスプロバイダを
アップグレードする際は、次の手順に従うことを強く推奨します:
1. アップグレードの前に手動認証を有効にします。
2. サービスプロバイダを2.xにアップグレードする前に、管理者のパーミッションを持つ
手動アカウントが少なくとも1つ機能していることを確認します。
3. SPのアップグレード後、このアカウントを使用してMoodleにログインし、
「サイト管理 > ユーザ > Shibboleth」の属性マッピングを、変更された属性名を
反映するよう調整します。
属性名は、ファイル/etc/shibboleth/attribute-map.xmlに、属性定義の「id」の
値として記載されています。
4. 統合WAYFを使用している場合は、各エントリの3番目のパラメータを
「/Shibboleth.sso/DS」に設定する必要がある場合があります。
5. Shibbolethアカウントでログインをテストします。
6. すべて正常に動作したら、手動認証を再度無効にします。
********************************************************************************
ログアウトサポートを追加する方法
--------------------------------------------------------------------------------
MoodleでShibbolethのログアウトをサポートするには、Shibbolethサービスプロバイダ(SP)
にMoodleのログアウト機能を認識させる必要があります。そうして初めて、SPがMoodleの
フロントチャネルまたはバックチャネルのログアウトハンドラをトリガできるようになります。
SPにMoodleのログアウトを認識させるには、Shibbolethのメイン設定ファイル
shibboleth2.xml(通常は/etc/shibboleth/内)の<MetadataProvider>要素の直前に、
次の内容を追加する必要があります。
--
<Notify
Channel="back"
Location="https://#YOUR_MOODLE_HOSTNAME#/moodle/auth/shibboleth/logout.php" />
--
次に、Shibbolethデーモンを再起動し、ログファイルにエラーがないか確認します。
エラーがなければ、Moodleにアクセスし、Shibboleth経由で認証してから、次のURLに
アクセスすることで、ログアウト機能をテストできます:
#YOUR_MOODLE_HOSTNAME#/Shibboleth.sso/Logout(標準的なShibbolethのインストールを
想定しています)。すべて正常に動作すれば、ログアウトに成功したことを示す
Shibbolethのページが表示され、Moodleに戻るとMoodleからもログアウトされている
はずです。
要件:
- PHPにSoap拡張モジュールが必要です。手動でインストールしなければならない場合が
あります。詳細は http://ch.php.net/soap をご覧ください。
- ログアウトは、Shibboleth Service Provider 2.1以降でのみ機能します。
- /moodle/auth/shibboleth/logout.phpはShibbolethで保護*してはいけません*!
Moodle全体がShibbolethで保護されている場合は、Apacheの設定で、他のすべての
requireルールの後に、次のようなものを追加する必要があります。
--
<Directory /path/to/moodle/auth/shibboleth/logout.php>
AuthType shibboleth
ShibRequireSession Off
require shibboleth
</Directory>
--
IISを使用している場合は、次のようにして同じことを実現できます:
--
<Path name="auth/shibboleth/logout.php" requireSession="false">
--
(shibboleth2.xmlのRequestMap内)
制限事項:
シングルログアウトは、SPとIdPの両方でSAML2が使用されている場合にのみサポート
されます。2009年10月の時点で、Shibboleth Identity Provider 2.1.4はまだシングル
ログアウト(SLO)をサポートしていません。そのため、Shibbolethのみの構成では
まだシングルログアウト機能を使用できませんが、SimpleSAML PHPなど、アイデンティティ
プロバイダとして使用できる他のSAML2製品があるかもしれません。
SLOがまだサポートされていない理由の1つは、フロントチャネルおよびバックチャネルの
ログアウトをサポートするよう対応したアプリケーションがまだ多くないことです。
Moodleのログアウトが、開発者がSLOを実装する動機付けになることを願っています。
一方で、最も簡単で安全なログアウト方法は、今でもユーザにウェブブラウザを終了
するよう伝えることです :)
このトピックの背景情報については、
https://wiki.shibboleth.net/confluence/display/SHIB2/SLOIssues および
https://wiki.shibboleth.net/confluence/display/SHIB2/NativeSPLogoutInitiator
も参照してください。
--------------------------------------------------------------------------------
Shibboleth認証に関する問題や質問については、次の担当者に連絡してください:
Lukas Haemmerle <lukas.haemmerle@switch.ch> または Markus Hagman <hagman@hytti.uku.fi>
設定例の詳細
関係するコンポーネントを示すための例として、特定のフェデレーションで必要な手順を以下に示します。
表記
- すべて大文字の表現は、実際の値のプレースホルダです。例えば、ドキュメント中の/PATH/TO/MOODLEは、サーバでは/var/www/html/moodleを意味する場合があります。
- シェルコマンドの「# COMMAND」という形式の「#」は、そのCOMMANDをスーパーユーザとして実行する必要があることを意味します。スーパーユーザは、ユーザ「root」、またはsudo権限を持つ別のユーザの場合があります。後者の場合は、「$ sudo COMMAND」のように、コマンドの前にsudoを付ける必要があります。このコマンドの「$」は、特権のないユーザであることを示します。
前提条件
- MoodleサイトがDebian GNU/Linux、またはUbuntu LinuxなどのDebian派生ディストリビューションで動作していること。
- このドキュメントでは、Linuxディストリビューションがシステムマネージャ「Systemd」を使用していることを前提としています。ただし、SysVやUpstartなど、別のinitシステム用にコマンドを簡単に変更できます。
- ウェブサーバApache2を実行していること。
- サイトがデフォルトポート443でHTTPSを提供していること。このドキュメントでは、そのURLを https://DOMAIN と表記します。DOMAINはMoodleサーバのドメイン名を表します。つまり、MoodleのURLが https://lms.example.com/ の場合、DOMAINはlms.example.comです。
サービスプロバイダの設定
1. Apache2用のShibbolethモジュールをインストールします
Shibbolethサービスプロバイダ(SP)用のApacheモジュールと、それを支えるShibデーモンを含むDebianパッケージlibapache2-mod-shibをインストールします:
# apt install libapache2-mod-shib --no-install-recommends
これにより、デフォルトの設定ファイル一式を含むディレクトリ/etc/shibbolethが作成され、システムサービスshibもインストールされます。
2. フェデレーションのメタデータ署名証明書federation-cert.pemを取得します
# wget https://FEDERATIONREGISTRY/signedmetadata/metadata-signer -O /etc/shibboleth/federation-cert.pem
3. Shibbolethのメイン設定ファイル/etc/shibboleth/shibboleth2.xmlを編集します
3.1 ApplicationDefaultsタグのentityIDを、使用するサービスのものに変更します
<ApplicationDefaults entityID="https://DOMAIN/shibboleth" REMOTE_USER="eppn subject-id pairwise-id persistent-id" cipherSuites="DEFAULT:!EXP:!LOW:!aNULL:!eNULL:!DES:!IDEA:!SEED:!RC4:!3DES:!kRSA:!SSLv2:!SSLv3:!TLSv1:!TLSv1.1">
ApplicationDefaultsタグの終わりはずっと下にあることに注意してください。ここで終了タグを追加しないでください!
3.2 ディスカバリサーバを設定します
<SSO discoveryProtocol="SAMLDS" discoveryURL="https://DISCOVERYSERVER"> SAML2 </SSO>
3.3 MetadataProviderを設定します
<MetadataProvider type="XML" url="https://METADATAPROVIDER/signedmetadata/metadata.xml" legacyOrgName="true" backingFilePath="test-metadata.xml" maxRefreshDelay="7200"> <MetadataFilter type="Signature" certificate="federation-cert.pem" verifyBackup="false" /> <MetadataFilter type="RequireValidUntil" maxValidityInterval="864000" /> </MetadataProvider>
3.4 鍵ファイルおよび証明書ファイルを準備します
<CredentialResolver type="File" use="signing" key="lms-signing-key.pem" certificate="lms-signing-cert.pem" /> <CredentialResolver type="File" use="encryption" key="lms-encrypt-key.pem" certificate="lms-encrypt-cert.pem" />
4. SPのメタデータ認証情報を作成します
# /usr/sbin/shib-keygen -n lms-signing -e https://DOMAIN/shibboleth # /usr/sbin/shib-keygen -n lms-encrypt -e https://DOMAIN/shibboleth
5. Apache用のShibbolethサービスを開始します
5.1 サービスを開始する前に設定をテストします:
# shibd -t /etc/shibboleth/shibboleth2.xml [possible errors or warnings] overall configuration is loadable, check console or log for non-fatal problems
エラーまたは警告がある場合は、続行する前にそれらを調べる必要があります。
5.2 サービスを開始します:
# systemctl start shibd
6. ApacheのバーチャルホストでShibbolethを有効にします
6.1 ApacheでShibbolethログインを有効にするには、/PATH/TO/MOODLE/auth/shibboleth/index.phpファイルをShibbolethで保護します。また、/etc/apache2/sites-available/SOMETHING.confファイルにSSL証明書を追加します:
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName DOMAIN
ServerAdmin YOU@DOMAIN
DocumentRoot /PATH/TO/MOODLE
ErrorLog ${APACHE_LOG_DIR}/DOMAIN-error.log
CustomLog ${APACHE_LOG_DIR}/DOMAIN-access.log combined
SSLCertificateFile /etc/ssl/certs/ssl-DOMAIN.crt
SSLCertificateKeyFile /etc/ssl/private/ssl-DOMAIN.key
<Location /moodle>
# just comment out
# ShibRequestSetting applicationId mdl
</Location>
<Directory /PATH/TO/MOODLE/auth/shibboleth/index.php>
AuthType shibboleth
# just comment out the next line and add the two lines below that
# ShibRequestSetting applicationId mdl
ShibRequireSession On
require valid-user
</Directory>
</VirtualHost>
</IfModule>
6.2 Shibdを有効にしてApacheをリロードします
# a2enmod shib # systemctl reload apache2.service
アイデンティティプロバイダの設定
7. サイトをフェデレーションに登録します
サイトのWAYFがディスカバリサービスに移動し、正しいIdPに誘導されるよう、サイトをフェデレーションに登録する必要があります。
7.1 アプリケーションのメタデータを取得します
メタデータは、URL https://DOMAIN/Shibboleth.sso/Metadata で取得できます。
7.2 メタデータと管理情報をフェデレーションに提出します
通常、フェデレーションには、メタデータをアップロードしてさまざまな管理情報を入力するためのウェブサイトがあります。フェデレーションの管理者がそのリンクを共有しているはずです。画面の指示に従ってください。
フェデレーションの運営者がリクエストを承認すると、SP登録リンクが届きます。
8. MoodleでShibbolethプラグインを有効にして設定します
登録に成功したら、MoodleでShibbolethプラグインを設定する必要があります。そのためには、まずMoodleでプラグインを有効にする必要があります。
8.1 MoodleでShibbolethプラグインを有効にします
Moodle管理者として、サイト管理 > プラグイン > 認証に移動し、「目」のアイコンをクリックしてShibbolethを有効にします。
8.2 MoodleでShibbolethプラグインを設定します
Moodleでアカウントを作成するには、少なくとも「ユーザ名」「名」「姓」「メールアドレス」の4つのフィールドが必要です。そのため、これらをIdPデータベースの対応する属性にマッピングする必要があります。このデータマッピングは、サイト管理 > プラグイン:認証 > Shibbolethなどで設定する必要があります。ここでも典型的な設定例を示します:
ユーザ名:eppn
データマッピング (名):givenName
データマッピング (姓):sn
データマッピング (メールアドレス):mail
上記の3つすべてで、「ローカルを更新する」を「毎回ログイン時」に、「設定値のロック」を「空の場合はロックしない」に設定します。
さらに、次の変更を行います:
Moodle WAYFサービス:No
アイデンティティプロバイダ (auth_shibboleth | organization_selection):ボックス内のすべてを削除します
ShibbolethサービスプロバイダのログアウトハンドラURL:/Shibboleth.sso/Logout
そして保存します。変更はすぐに有効になり、サービスを再起動する必要はありません!
これで、https://DOMAIN/login/ にアクセスし、Shibbolethを選択してフェデレーションのWAYFに移動できます。
デバッグ方法
- https://DOMAIN/Shibboleth.sso/Login にアクセスします。フェデレーションのディスカバリサービスに移動するので、そこでIdPを選択する必要があります。そこからIdPのログインページに移動します。認証情報が受け入れられると、Moodleサイトに戻ります。Moodleサイトに戻ったら、https://DOMAIN/Shibboleth.sso/Session にアクセスします。次の例のように、必要なすべての属性が表示されるはずです:
一部のIdPは、最小限のユーザフィールドしかMoodle SPと共有しないため、問題が発生する場合があります:
- Shibbolethフィールドの欠落に関連するMoodleのエラーは、Shibboleth認証プラグイン内のデータマッピングを変更し、フィールドがロックされていないことを確認することで修正できます。Shibbolethが対応する情報を自動的に提供しない場合、ユーザは手動でデータを入力するよう求められます。
- ユーザ名の無効な文字に関連するMoodleのエラーは、「ユーザ名に拡張文字を許可する」を有効にすることで修正できます(セキュリティ > サイトポリシーにあります)。