SAML 2.0によるシングルサインオン(SingleSignOnプラグイン)

SingleSignOnプラグインは、Security Assertion Markup Language 2.0 (SAML 2.0)プロトコルによりシングルサインオン機能を提供する別売りのプラグインです。IDプロバイダーに登録されたID(メールアドレス)・パスワード1つでPowerCMS X(またその他のWebアプリケーション)の認証を行うことができるようになります。ユーザー(PowerCMS X管理画面利用者)・メンバー(会員限定サイト)の両方に対応しています。

インストールと設定

設定の要旨

IdPはOkta等のIDプロバイダー、SPはPowerCMS Xです。用語はIdPにより異なる場合があります。

  • IdP / SPでEntity IDを合わせます
  • IdPにはSPのACS URL(アサーション・コンシューマー・サービス URL)を設定します
  • SPにはIdPのACS URLを設定します
  • IdPから送信するレスポンスは署名が入るので証明書を受け取ります
  • IdPにおいてSPからのリクエストに署名を要求する設定になっていれば証明書を作成してIdPに渡します

これらはメタデータXMLを交換し合うことで情報のやり取りができます。

SP(PowerCMS X)の準備

  • SingleSignOnプラグインをpluginディレクトリに配置します
  • SingleSignOnプラグインを有効化します
  • SingleSignOnプラグインのappディレクトリにあるpt-sso.phpをブラウザからアクセス可能な領域に設置します
    • pt-sso.phpを開きパス、認証方式とオプション設定を変更します
  • 環境変数composer_autoloadにて指定したディレクトリでcomposer require litesaml/lightsaml:"4.1.4"を実行します
  • プラグイン設定で以下の設定を行います
項目 設定値例 備考
Identity ProviderのSSOエンドポイントURL https://auth.example.com/auth/realms/Alfasado/protocol/saml IdPのメタデータ内を確認して設定します
エンティティID PowerCMSX IdP管理者が分かりやすいものであれば何でもよいですし、IdP管理者が指定しても良いです
ACSエンドポイントURLを入力 https://test.example.com/pt-sso.php  
Identity Providerの公開鍵ファイル名、または公開鍵ファイルの絶対パスを入力 /var/www/vhosts/test/customized_files/plugins/SingleSignOn/cert/idp_public.key ファイル名は変更可
クライアント(SP)で署名機能を利用する 必要に応じてチェック IdPの設定と合わせます
秘密鍵ファイル名、または秘密鍵ファイルの絶対パスを入力 /var/www/vhosts/test/customized_files/plugins/SingleSignOn/cert/sp_private.key  
公開鍵ファイル名、または公開鍵ファイルの絶対パスを入力 /var/www/vhosts/test/customized_files/plugins/SingleSignOn/cert/sp_public.pem  
  • プラグイン設定の「Identity Providerの公開鍵ファイル名、または公開鍵ファイルの絶対パスを入力」に入力したパスにIdPの公開鍵を保存します
  • プラグイン設定を行ったシステムスコープもしくはワークスペースにおいてツール>SAML SPメタデータを開き、XMLをダウンロードします。このメタデータをIdP管理者に送付します

IdPの準備

SPのメタデータを基に以下の項目を設定します。多くの場合、IdPの管理者が設定を行います。用語はIdPにより異なる場合があります。

項目 設定値例 備考
クライアントID PowerCMSX  
Name IDフォーマット email  
アサーションを署名する オン  
署名アルゴリズム RSA_SHA256  
クライアント署名が必要 オン or オフ 署名は任意で、SPと設定を合わせます
有効なリダイレクトURI https://test.example.com/powercmsx/*  
ACSのPOSTバインディングURL https://test.example.com/powercmsx/pt-sso.php?__mode=acs&_model=user  

関連する環境変数

disallow_pwd_login

trueにすることで通常のユーザー名・パスワードによるログイン、パスワード再設定を利用できないようにします。AppPropertiesプラグインを利用して管理画面の環境変数で設定することもできますが、管理者がログインできなくなってしまった場合に備えてconfig.jsonに記述することをおすすめします。

SAMLログインボタンのカスタマイズ

SingleSignOnプラグイン内のtmpl/sso_login_saml.tmplをコピーしてalt-tmplに入れた後でカスタマイズをしてください。

導入実績のあるIdP

  • Okta
  • 大手SIer開発のIdP
  • KeyCloak

トラブルシューティング

トラブルシューティングの際にはブラウザから送信されるSAMLRequest、IdPから送信されるSAMLResponseを解析が必要となります。これらはブラウザの開発者ツールのネットワークタブにて確認・取得ができます。また、SAMLResponseの解析にはSAML Message Decoder等のツールも使用できます。

エラーコードU01が表示される

IdPからSPにPOSTされるSAMLResponseを解析し、saml:Subjectの中のsaml:NameIDの値がPowerCMS Xに登録されているメールアドレスかを確認してください。

エラーコードX05が表示される

OktaなどIdPによってはSAMLResponseからInResponseToの値が取れないことがあります。プラグイン設定「IdP-Initiated SSOを有効化」にチェックを入れてみてください。

設定に関するサポートについて

通常の製品サポートでは個別案件に対するサポートができないため、「SingleSignOn」プラグインの設定については有償プランをご用意しています。必要に応じてご相談ください。