null Alfresco Community EditionでSAML SSO(2) - ApacheでSAML認証用リバースプロキシを構築する

こんにちは。大谷です。

Alfresco Community EditionでSAML SSOということで、前回の記事「Alfresco Community EditionでSAML SSO(1) - Alfrescoを外部認証連携する」に続いてSAML SSOを実装する部分を紹介したいと思います。いくつかの実装方法がありますが、今回はApache + mod_auth_mellonでSAML SP(Service Provider)のフロント部分を担うリバースプロキシを構築します。

なお、SAML SSOのテストにはIdP(ID Provider)が必要ですが、本記事ではKeycloakを検証用のIdPとして利用します。既に社内でお使いのIdPがある場合はそちらで同様の設定を行ってください。

 

事前準備

SAML SSOの準備として以下のセットアップを行います。

Alfrescoにテスト用ユーザを追加する

前回の記事でインストールしたAlfresco Shareにadminユーザでログインし、管理ツール->ユーザー->新しいユーザーをクリックして以下のユーザを追加します。なお、前回の記事に従ってインストールした場合、Alfresco Shareにはhttp://localhost:8080/share/でアクセスできます。

  • 名 : test1
  • 姓 : user
  • Eメール : test1.user@aegif.jp
  • ユーザー名 : test1.user
  • パスワード : 適当に入力

ApacheをAlfrescoへのリバースプロキシとしてセットアップする

SAML SP用のリバースプロキシとしてApache 2.4をインストールします。CentOS7にApache 2.4をインストールする場合はこちらの記事が参考になるかと思います。

続いて、Alfrescoにアクセスするためのリバースプロキシの設定を行います。Apacheの設定ファイル(/etc/httpd/conf/httpd.confもしくは/etc/httpd/conf.d/ssl.confあたり)を開き、ApacheをホストするポートのVirtualHostタグの中に以下の設定を追記します。

ProxyRequests Off
ProxyPass / http://<Alfresco Shareのホスト名>:<Alfresco Shareのポート>/
ProxyPassReverse / http://<Alfresco Shareのホスト名>:<Alfresco Shareのポート>/

Apacheを再起動し、ブラウザでhttp://<Apacheのホスト名>:<Apacheのポート>/share/にアクセスしてAlfresco Shareのログイン画面が表示されることを確認します。

例えばApacheをhttp://localhost:80でホストするようセットアップした場合はhttp://localhost:80/share/にアクセスして確認します。

Keycloakをセットアップする

SAML IdP用にKeycloakを用意します。こちらの記事を参考にするとDockerを使って簡単にKeycloakをセットアップできます。この記事通りセットアップすると、Keycloakがhttp://localhost:18080でホストされます。

続いて、ブラウザでhttp://localhost:18080/auth/admin/にアクセスして管理者ユーザでログインし、画面左上のAdd realmをクリックしてテスト用レルムalfrescotestを作成します。

レルムを作成したら、ブラウザでhttp://localhost:18080/auth/realms/alfrescotest/protocol/saml/descriptorにアクセスしてIdPメタデータをファイルidp_metadata.xmlに保存します。このファイルはApacheサーバにコピーしておきます。

Keycloakにテスト用ユーザを追加する

画面左上でalfrescotestレルムを選び、Manage->Users->Add userボタンをクリックし、以下のユーザを作成します。

  • Username : test1.user (Alfrescoに作成したユーザのユーザー名と一致させる)
  • Email : test1.user@aegif.jp
  • First Name : test1
  • Last Name : user

作成したらユーザtest1.userのCredentialsタブを開き、Reset Password欄にパスワードを入力してTemporaryをOFFにセットし、Reset Passwordをクリックしてパスワードを設定します。

 

Apacheとmod_auth_mellonでSAML SPをセットアップする

ではSAML SSOのセットアップに進みます。まずはApache 2.4とmod_auth_mellonを使ってSAML SPをセットアップします。mod_auth_mellonはApacheでSAML認証を行うためのモジュールですが、通常のApacheインストールには含まれていないため、別途インストールする必要があります。

まず、インストールの前に以下の2つを決めておきます。

  • Entity ID : SAML SPの一意のID。今回はhttp://localhost:80とします。
  • SAML通信用URLパス : SAML通信用エンドポイントをホストするURLパス。今回は/samlとします。

続いて、mod_auth_mellonのインストールとセットアップを行います。mellon_create_metadata.shの引数はEntity ID、SAML通信用URLです。

yum install mod_auth_mellon
mkdir /etc/httpd/saml
cd /etc/httpd/saml
/usr/libexec/mod_auth_mellon/mellon_create_metadata.sh http://localhost:80 http://localhost:80/saml

上記コマンドを実行すると、/etc/httpd/saml/以下にcertファイル、keyファイル、xmlファイル(SPメタデータ)が生成されます。今回の場合は/etc/httpd/saml/http_localhost_80.xmlがSPメタデータなのでこれを取得しておきます(後ほどIdPの設定に使います)。また、IdPメタデータidp_metadata.xml/etc/httpd/saml/にコピーします。

最後に、Apacheの設定ファイルを開き、ApacheをホストするポートのVirtualHostタグの中に以下の設定を追記します。

  <Location />
    MellonEndpointPath "/saml"
    MellonIdPMetadataFile "/etc/httpd/saml/idp_metadata.xml"
    MellonSPPrivateKeyFile "/etc/httpd/saml/http_localhost_80.key"
    MellonSPCertFile "/etc/httpd/saml/http_localhost_80.cert"
    MellonSPMetadataFile "/etc/httpd/saml/http_localhost_80.xml"

    AuthType "Mellon"
    Require valid-user
    MellonEnable "auth"
  </Location>
  RequestHeader set X-Alfresco-Remote-User %{MELLON_username}e env=MELLON_username

これらの設定は、SAML通信用エンドポイントの有効化とルートパス以下へのSAML認証の有効化、SAML認証成功時にApache環境変数MELLON_*にセットされるSAMLユーザ属性をリクエストヘッダに付与する設定です。ここでは、SAMLユーザ属性usernameをリクエストヘッダパラメータX-Alfresco-Remote-Userにセットするよう指定しています。

SAML認証に成功すると指定されたリクエストヘッダパラメータにユーザ名がセットされ、Alfrescoがそれを確認して認証OKと判定する、という流れでSSOが処理されるようになります。

以下、注意点です。

  • key,cert,xmlファイルのファイル名は適宜生成されたファイル名に書き換えてください
  • X-Alfresco-Remote-UserはAlfrescoで設定したリクエストヘッダパラメータ名と一致するようにします
  • MELLON_usernameはApache環境変数ですが、この後のKeycloak設定の属性マッピングで指定した名前とMELLON_以降が一致するようにします
  • 念のためmod_headersが有効になっているか確認してください(リクエストヘッダパラメータ付与に利用しています)

設定が終わったらApacheを再起動します。

 

KeycloakのSAML設定を行う

続いて、SAML IdPの設定を行います。今回は検証目的なのでKeycloakで最低限の設定を行います。

まず、管理者ユーザでKeycloakにログインしてalfrescotestレルムを選択し、Configure->Clients->Createをクリックし、ImportのSelect fileから取得しておいたSPメタデータファイルをインポートしてSaveします。これでSAML SPが登録されました。

続いて、登録されたSAML SPのMappersタブを開き、Createボタンをクリックします。ここで、以下のとおり属性マッピングを作成します。この設定により、SAML認証成功時にKeycloak上のユーザ属性情報が指定されたマッピングでSAML SPに送付されるようになります。

  • Name : username
  • Mapper Type : User Property
  • Property : username
  • SAML Attribute : username (Apache環境変数のMELLON_以降と一致するように設定する)
  • SAML Attribute NameFormat : Basic

以上で最低限の設定は完了です。

 

動作確認してみよう

では、早速動作確認しましょう。確認のポイントは以下のとおりです。

  • ブラウザでhttp://<Apacheのホスト名>:<Apacheのポート>/share/にアクセスすると、Keycloakのログイン画面が表示される(上記の例ではhttp://localhost:80/share/
  • Keycloakのログイン画面でユーザ名test1.userとパスワードを入力し、認証に成功するとAlfresco Shareの画面に遷移し、test1.userのダッシュボードが表示される

 

今回の内容は以上になります。リバースプロキシ用ApacheやSAML IdP用Keycloakなど、必要なソフトウェアの準備が多く大変なように感じられるかもしれませんが、設定自体はそこまで複雑ではないことがお分かりいただけたかと思います。

実際にSP/IdPをセットアップする場合は署名や暗号化、属性マッピングなどの設定を要件に沿って詳細に行う必要がありますが、検証目的ではこれで十分だと思います。皆様も是非SAML SSOにトライしてみてください。

関連記事
install

RANKING
2020.10.12
2020.11.19
2020.12.23
2020.10.05
2020.11.25