WordPressとMoodle(ムードル)をSSO認証してみる

Moodle(ムードル)というオープンソースのソフトウェアがあります。ムードルはLMS:Learning Management System)というジャンルになり主に教育機関とかで使われたりするOSSの一つです。

WordPressはblogのCMSとしては有名なもので、世界中で使われていて現在ではコーポレートサイトなどでも使われているOSSになります。

今回はこの二つを一つのサーバーにあり、ログインをSSOを使って認証したいと思います。

SSOって何?

シングルサインオン(SSO:Single Sign On)といいますが、簡単に言うと1度のユーザー認証で複数のシステムの利用が可能になる仕組みです。詳細はシングルサインオン(SSO:Single Sign On)とはのページを参照してください。

WordPRessのアカウントでムードルにログインする

今回は構成としてWordPressのアカウントを使い、ムードルにログインするという仕組みを作りたいと思います。逆もできると思いますが、そっちは頑張ってください。僕はやり方わかりません。

サーバー構成

今回は同一サーバーに二つのCMS(WordPRessとMoodle)が入っている前提となります

IPアドレス(ドメイン)でアクセスしたら、WordPressのサイトが最初に見えるという前提となります。ムードルは安定版を使ってます。

SSLはテストなので対応していませんが、SSLも証明書でサイトが対応していれば問題ありません。

参考サイト

WordPress を IdP として使用する Moodle SAML シングル サインオン (SSO) | WordPress SSO ログインのサイトを参考にします。

それぞれのインストールについて

基本的にWordPressとムードルのインストールについては省略します。ムードルのインストールは以下のYouTubeを参考ください

LAMPの構築について

LAMPの構築はBildree(ビルドリー) - 環境構築スクリプトLAMPを使ってます。

WordPressとムードルに管理者ユーザーは作成

それぞれインストール時に管理用ユーザーは作成すると思います。これはそのまま作成してください。

動画で見る

記事を読むのは大変だな・・動画で見たいって方は動画でみてください。

WordPressとMoodleのSSO連携動画

1. WordPres側の作業

まずはWordPress側の作業をしたいと思います。

プラグインのインストール

WordPressの公式プラグインサイトよりダウンロードします。Login using WordPress Users ( WP as SAML IDP )

プラグインを有効化したらムードル側での作業になります

2. Moodle側で作業

ムードル側にてプラグインのインストールをしていきます。ムードル側に表示されている設定内容をWordPressにいれていったりします

プラグインのインストール

ムードルにプラグインをインストールします。プラグインは配布先の公式サイトからダウンロードできます。ファイル名はmo_saml.zipとなります

サイト管理をクリック

プラグインの項目からプラグインをインストールをクリック

mo_saml.zipをアップロードします

zipファイルからプラグインをインストールするをクリックします

続けるをクリックします

現在のリリース一覧がでてきます。一番下の続けるをクリックします

Modleデータベースを更新するをクリックします

成功の画面がでたら続けるをクリックします

新しい設定 - miniOrange SAML 2.0 SSO

プラグインをインストールすると新しい設定 - miniOrange SAML 2.0 SSOという画面がでます。

よくわからないので何も設定しないでそのまま変更を保存するおします

miniOrange SAML 2.0 SSOの設定をする

参考サイトの画像ではService Provider Setupとなっています。この画面を見つけます。

プラグイン > 認証 > 認証管理 をクリック

利用可能な認証プラグインからminiOrange SAML 2.0 SSOの設定をクリックします

SPエンティティID を見つける

Service Provider Metadataから以下の二点の項目を見つけます

  1. SP Entity-ID:http://IPアドレス or ドメイン/moodle
  2. ACS URL:http://IPアドレス or ドメイン/moodle/auth/mo_saml/index.php

ここのURLをコピーしてWordPressに貼り付けます。

3. WordPress側で作業(IDプロバイダーとして設定)

引き続きWordPress側の作業になります。ここまではWordPressとムードルにプラグインをインストールしただけになります。まだ何も設定はしていないので、ご注意ください。

Service Providersを表示

プラグイン > WordPress IDP > Service Providersを表示します。

  • Service Provider Name*:ここの名前は任意なので好きな名前つけてください(WordPRessSSOとしてます)
  • SP Entity ID or Issuer:ムードル側で表示されていたSP Entity-IDを入れます。
  • ACS URL:ムードル側で表示されていたACSのURLを入れます。
  • NameID format:urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddressを選択します
  • Assertion Signed:Check if you want to sign the SAML Assertion.をチェックします

Saveを押して保存します

IDP Metadataタブを表示

Metadata XML File:でXMLがダウンロードできるので、このファイルをダウンロードして保存します。このファイルは今度ムードルの設定で使います。

4. Moodle側で作業1(SPとして設定)

WordPress側の作業が終わったので、今度はムードル側の作業をします。

参考サイトの画像ではService Provider Setupとなっています。この画面を見つけます。

プラグイン > 認証 > 認証管理 をクリック

Service Provider Setupを入力していく

ここに必要な情報をいれていきます

  • IDP Name:WordPress(このIDP Nameがムードルのログイン画面に表示されます)
  • Select the Method:Metadata URL/XMLを選択
  • IDP Metadata URL/XML:ここに先ほどダウンロードしたxmlファイルを貼り付けます
  • 保存

後は何もしないで画面したにある変更を保存するをクリックします

テスト接続できるか確認

Service Provider SetupのTest Configurationを確認します。

miniOrange SAML 2.0 SSOの設定テストをクリックします

Test configurationをクリックします

TEST SUCCESSFULと表示されたら接続成功です

4. Moodle側で作業2(属性マッピング)

今度は属性マッピングの設定をします。先ほど入力したService Provider Setupの下の項目になります

Attribute Mapping

デフォルトでは空になりますが、このままではエラーとなります。

  • Username:NameID

と入力をして保存します

5. Moodle側で作業3(画面に表示)

現時点では接続はできますが、ログイン画面には表示されないので、表示されるようにします。

プラグイン有効化

プラグイン > 認証 > 認証管理 をクリック

利用可能な認証プラグインからminiOrange SAML 2.0 SSOの有効にするをクリックします

有効化すると目のアイコンが青になります

これをすると、ムードルのログイン画面にあなたのアカウントを使用してログインしますというのがでます。

ログイン確認

可能なら別のWordPressアカウントを使って貰うと良いです。理由は以下の通りです

  • WordPressの管理者ユーザーとムードルのユーザー名が同じ
  • WordPressの管理者ユーザーとムードルのパスワードが同じ

だとした場合、WordPressの管理者アカウントでログインをしても、ムードルでのSSOでログインすると権限は一般ユーザーとなります。途中で「???」みたいになると思うので、別のユーザーをWordPressで作ってログインすることをしてください。

最初に登録は必要

今回使ったプラグインは無料版のため、WordPressのアカウントでログインするにも最初にムードルでの登録が必要になります。

個人支援・寄付について

サイトラボではBuildreeの開発などのため、現在個人支援・寄付を受けております。ご協力いただける方はお願いいたします。当サイトではビットコインで受け付けております。

  • ビットコイン:3LHnADwZwUbic2L45EnVJEykiG6KfbqrwS