※ SAML Login プラグインを利用するためには PowerCMS とは別にライセンスを購入する必要がございます。
SAML Login プラグインの特長
- IdP 認証サービスにログインすると PowerCMS の管理画面および会員限定サイトへログインできる (シングルサインオン)
- PowerCMS の管理画面および会員限定サイトからログアウトすると IdP 認証サービスからもログアウトできる (シングルサインアウト)
- ログイン時に PowerCMS へユーザーを自動作成するか設定が行える
- IdP 認証サービスの情報と PowerCMS のユーザー情報の紐付け (マッピング) を定義できる
動作環境
- PowerCMS がインストールされ、正常に運用している環境
Perl モジュール
以下の Perl モジュールのインストールが必要です。
- Crypt::OpenSSL::RSA
- Crypt::OpenSSL::X509
- Crypt::OpenSSL::VerifyX509
- Crypt::OpenSSL::Random
- DateTime
- DateTime::Format::XSD
- Digest::SHA
- Digest::SHA1
- IO::Compress::RawDeflate
- IO::Uncompress::RawInflate
- MIME::Base64
- URI
- URI::QueryParam
- XML::XPath
- XML::Generator
- XML::CanonicalizeXML
SAML Login のインストール
- SAML Login のパッケージを解凍し、サーバー上の PowerCMS のプラグインディレクトリへ設置する - $MT_HOME/plugins/DisableLoginAgain
- $MT_HOME/plugins/SAMLLogin
- $MT_HOME/plugins/UserSessionExtend - ※ $MT_HOME は PowerCMS のインストール先を指すので環境にあわせて読み替えてください 
 ※ PSGI 環境の場合は PSGI を再起動します。
 
- PowerCMS 管理画面へログインし、システムレベルのプラグイン設定画面に SAML Login が表示されていることを確認する 
IdP 認証サービスへの設定
SAML Login プラグインを利用するためには、IdP 認証サービスへ PowerCMS の情報を設定する必要があります。
設定画面や項目の名称は IdP 認証サービスによって異なるため注意してください。
IdP 認証サービスのサービスプロバイダのへ設定に以下を追加します。
| 項目 | 備考 | 設定例 | 
|---|---|---|
| ACS URL(返信URL/シングルサインオンURL) | SAML認証が完了したあとにアクセスする PowerCMS の URLを指定します。 管理画面の URL が「https://example.com/cgi-bin/mt/mt.cgi」である場合は「?__mode=acs」を追加した URL を設定します。 会員限定サイトの CGI (mt-members.cgi) の URL が 「https://example.com/mt/mt-members.cgi」の場合は「?__mode=acs」を追加した URL を設定します。 両方設定する必要はなく必要な方だけ設定してください | https://example.com/cgi-bin/mt/mt.cgi?__mode=acs https://example.com/cgi-bin/mt/mt-members.cgi?__mode=acs | 
| Audilence URI (Entity ID) | サービスを識別するための専用の ID を指定します。後述するプラグイン設定の「Entity ID」に同じ値を設定します。 | https://example.com/ | 
| Name ID format | 対象ユーザーの識別子に使用します。PowerCMS ではユーザー名にあたります。 後述するプラグイン設定の「Name IDフォーマット」に同じ値を設定しますが、IdP 認証サービス側で指定できない場合は、IdP 認証サービスが指定する値を PowerCMS へ設定します | EmailAddress | 
| Single logout service | シングルログアウトを利用する場合に設定を行います。管理画面の URL が「https://example.com/mt/mt.cgi」の場合は「?__mode=sls」を追加した URL を指定してください。 | https://example.com/mt/mt.cgi?__mode=sls | 
設定後、IdP 認証サービスからメタデータ XML を取得します。
SAML Login プラグインの設定
SAML Login プラグインの設定画面から以下の項目を設定します。 設定内容についてはプラグイン設定の項を参照してください。
| 項目 | 備考 | 設定例 | 
|---|---|---|
| 管理画面設定 | ||
| Entity ID | IdP 認証サービスの「Audilence URI( Entity ID)」の値を設定してください | https://example.com/ | 
| IdPメタデータXML | IdP で取得したメタデータ XMLを設定してください。 | <?xml version="1.0" encoding="UTF-8"?>... | 
| Name IDフォーマット | 対象ユーザーの識別子に使用します。PowerCMS では、ユーザー名にあたります。 | ユーザー名をEメールアドレスにする場合「EmailAddress」を指定します。 | 
| 属性マッピングJSON | SAML のレスポンスで渡された saml:Attribute 要素の値をユーザーの属性に設定するためのマッピングを JSON フォーマットで指定します。 {
  "saml:Attribute 要素の Name 属性の値":" PowerCMS ユーザー情報の属性名(*1)",
  ...
}*1) PowerCMS ユーザーの属性についてカスタムフィールドを指定する場合は、「field.author_seciossgroup」のように先頭に「field.」を付け、後にカスタムフィールドのベースネーム (author_seciossgroup) を指定します。*2) ひとつの saml:Attribute 要素に複数の値が渡される場合は、カスタムフィールドのベースネームの末尾に1からの連番を付けたカスタムフィールドを作成することで複数の値を保存することができます。 連番のうち 1 は番号を省略することができます。 | {
  "email": "email",
  "seciossGroup": "field.author_seciossgroup"
} | 
| カスタムACS URL | IdP 認証サービスから PowerCMS の URL へアクセスできない場合、IdP 認証サービスからアクセスできる URL を用意して、こちらへ設定します。 | |
| ユーザーを作成する | PowerCMS 側にユーザーがいない場合、ユーザーを作成するかを設定します 新規ユーザーを作成した場合、権限は「管理画面へのアクセス」のみ付与されます | |
| 自動リダイレクト秒 | 管理画面のログイン画面で、IdPにリダイレクトするまでの秒数を指定します。 | 1 | 会員設定 | 
| ログインスペースID | 会員サイトの、ワークスペース/スペースの ID を設定してください。カンマ区切りで複数設定できます。 | 1,2 | 
| 会員ロール名 | 新規ユーザー作成するときの、ロールを指定します。カンマ区切りで複数設定できます。 | 会員ページの閲覧 | 
| Entity ID | IdP 認証サービスの「Audilence URI( Entity ID)」を指定します。 | https://example.com/ | 
| IdPメタデータXML | IdP 認証サービスで取得したメタデータ XMLを設定してください。 | <?xml version="1.0" encoding="UTF-8"?>.. | 
| Name IDフォーマット | 対象ユーザーの識別子に使用します。PowerCMS では、ユーザー名にあたります。 | ユーザー名をEメールアドレスにする場合「EmailAddress」を指定します。 | 
| 属性マッピングJSON | ※管理画面設定の内容を参考にして下さい | |
| カスタムACS URL | IdP 認証サービスから PowerCMS の URL へアクセスできない場合、IdP 認証サービスからアクセスできる URL を用意して、こちらへ設定します。 | |
| ユーザーを作成する | PowerCMS 側にユーザーがいない場合、ユーザーを作成するかを設定します | ステージ環境 | 
| Entity ID | IdP 認証サービスより、「Audilence URI( Entity ID)」に設定した内容を設定してください | https://stg.example.com/ | 
| IdPメタデータXML | IdP で取得したメタデータ XMLを設定してください。 | <?xml version="1.0" encoding="UTF-8"?>... | 
| 公開環境 | ||
| Entity ID | IdP 認証サービスより、「Audilence URI( Entity ID)」に設定した内容を設定してください | https://www.example.com/ | 
| IdPメタデータXML | IdP で取得したメタデータ XMLを設定してください。 | <?xml version="1.0" encoding="UTF-8"?>... | 
環境変数
SAMLLoginAdminScreen
SAML 認証を行うかどうかの設定を行います。初期値は 0 です。 
プラグインをインストールし、必要な設定が完了したら 1 にしてください。  
会員サイトでSAML 認証を行うためのテンプレート修正
会員限定サイトで SAML 認証を行うためには mt-members.cgi へ下記の表に従ってパラメータを送信することでシングルサインオン/シングルサインアウトを開始できます。
| パラメータの名前 | シングルサインオンするときの値 | シングルサインアウトするときの値 | 
|---|---|---|
| __mode | saml_login | single_logout | 
| return_url | サインイン後に遷移したいURL | サインアウト後に遷移したいURL | 
例えば下記の URL へアクセスすることでシングルサインオンを開始できます。
https://example.com/cgi-bin/mt/mt-members.cgi?__mode=saml_login&サインイン後に遷移したいURL
上記は GET リクエストでパラメータを送信していますが、POST リクエストで送信しても問題ありません。
サインイン修正箇所
- __modeパラメータへ- saml_loginを渡す処理を追加
- ユーザ名、パスワード、サインイン情報を記憶するを削除
下記は標準テーマのテンプレートを修正した場合の例です。 (不要な部分を MTIgnore タグで無効化していますが削除しても問題ありません)
<form class="login_form" method="post" action="<$MTVar name="script_url" trim="1" strip_linfeeds="1" escape="html"$>"><MTLoop name="query_params">
      <input type="hidden" name="<MTVar name="name" escape="html">" value="<MTVar name="value" escape="html">" /></MTLoop>
      <input type="hidden" name="return_url" value="<MTQuery key="return_url" setvar="return_url"><MTIf name"return_url"><$MTQuery key="return_url" escape="html"$><MTElse><$MTCurrentArchiveURL ></MTIf>" />
      <input type="hidden" name="blog_id" value="<MTVar name="blog_id" escape="html">" />
      <input type="hidden" name="__mode" value="saml_login" />
<MTIgnore>
      <p>
          <label for="username">ユーザー名</label>
          <span class="post_input">
             <input type="text" name="username" id="username" value="" />
          </span>
      </p>
      <p>
          <label for="password">パスワード</label>
          <span class="post_input">
              <input type="password" name="password" id="password" />
          </span>
      </p>
      <p>
          <span class="post_input_etc">
              <label><input type="checkbox" name="remember" value="1" /> サインイン情報を記憶する</label>
          </span>
      </p>
</MTIgnore>
      <p class="post_submit">
          <input type="submit" class="btn-primary btn" value="サインイン" />
      </p>
  </form>
サインアウト修正箇所
- Single logout service を利用する場合のみ設定が必要です
- __modeパラメータへ- single_logoutを渡す処理を追加
下記は標準テーマのテンプレートを修正した場合の例です。 (不要な部分を MTIgnore タグで無効化していますが削除しても問題ありません)
<MTIgnore> <a class="btn btn-primary" href="<$MTVar name="member_script" trim="1" strip_linfeeds="1" escape="html"$>?__mode=logout&blog_id=<$MTBlogID escape="html"$><MTIf name="return_url">&return_url=<$MTVar name="return_url" escape="url"$></MTIf>"><i class="icon-user icon-white"></i> ログアウト</a> </MTIgnore> <a class="btn btn-primary" href="<$MTVar name="member_script" trim="1" strip_linfeeds="1" escape="html"$>?__mode=single_logout&blog_id=<$MTBlogID escape="html"$><MTIf name="return_url">&return_url=<$MTVar name="return_url" escape="url"$></MTIf>"><i class="icon-user icon-white"></i> ログアウト</a>
同梱されているプラグインについて
管理画面の場合、ログイン画面表示時に自動的に IdP へのリダイレクトが行われるため、hidden パラメータが引き継がれなくなります。 そのため、なるべくログイン画面を表示しないようにするプラグインを同梱しています。
DisableLoginAgain プラグイン
PowerCMS の操作で、ログイン認証を求める操作の場合に、認証を求められないようにします。 例: 管理画面のロックおよび解除、排他制御の解除、ステージ環境・公開環境への同期
UserSessionExtend プラグイン
PowerCMS のセッション維持期間について、ログイン時点からの期間ではなく、管理画面内での最終操作からの期間とします。


