null Alfresco Community Edition 23.2とKeycloakでOIDC認証を試してみる

こんにちは。今回はAlfresco Community Edition 23.2とKeycloakでOIDC認証を試す方法をご紹介します。

もともとAlfrescoにはAlfresco Identity Service(Alfresco IDS)という製品があったのですが、以下の記事のとおり2024年9月1日にEOLを迎えることが決まったようです。

Alfresco Identity Service End of Life

上記の記事にもあるように、Alfresco IDSは実質Keycloakに薄い層を被せただけのものなので、オリジナルのKeycloakに移行することが推奨されています。

Moving forward, we suggest customers use the original Keycloak project, a mature open-source project backed by Red Hat.
Currently, Alfresco IDS is a thin customized layer on top of Keycloak. Because of this, customers will not lose capabilities when transitioning from Alfresco IDS to Keycloak and the user experience will not be disruptive for existing customers.

そこで、今回は上記の記事の末尾でも紹介されている以下のリンクを参考にして、Alfresco Community Edition 23.2 とKeycloakの連携を試してみます。

alfresco-identity-service-to-keycloak

今回ご紹介する手順を試した時の手元の環境は以下のとおりです。

  • M2 MacBook Pro
  • macOS Sonoma 14.5
  • Docker Desktop 4.27.2
  • Docker 25.0.3
  • Docker Compose v2.24.5-desktop.1

Keycloakの準備

まず、適当なフォルダにalfresco-identity-service-to-keycloakをcloneします。

git clone https://github.com/aborroy/alfresco-identity-service-to-keycloak.git

次に alfresco-community-keycloak フォルダに移動します。

cd alfresco-identity-service-to-keycloak/alfresco-community-keycloak
alfresco-community-keycloakと同じ階層に alfresco-community-aims というフォルダがあり、フォルダの中身もほぼ同じですが、こちらはKeycloakではなくAlfresco IDSのDockerイメージを使う場合のサンプルになります。

テキストエディタで.envを開き、HOST_IP をホストのローカルネットワークのIPに書き換えます(ここではオリジナルのファイルのまま仮に192.168.1.140としておきます)。

# Add your local network IP
HOST_IP=192.168.1.140

今回はAlfrescoはSDKで作成した開発環境のものを使いたいので、compose.yaml は alfresco-identity-service(Keycloak)だけを残して他は削除します。

services:
    alfresco-identity-service:
        image: quay.io/keycloak/keycloak:${KEYCLOAK_TAG}
        environment:
          - KEYCLOAK_ADMIN=admin
          - KEYCLOAK_ADMIN_PASSWORD=admin
          - DB_VENDOR=h2
        command: "
            start --import-realm --hostname=$HOST_IP --hostname-port=8999 --http-enabled=true --hostname-strict-https=false
          "
        volumes:
          - ./config/alfresco-realm.json:/opt/keycloak/data/import/alfresco-realm.json
        ports:
          - 8999:8080

ここでは詳しい説明は割愛しますが、コンテナ起動時に alfresco-realm.json というファイルをインポートして「alfresco」というレルムが作成されるように設定されています。

以上で設定は完了です。docker composeコマンドでコンテナを起動します。

docker compose up

起動したら、ブラウザで http://192.168.1.140:8999/ を開きます(192.168.1.140の部分は.envで指定したIPに書き換えてください)。

左側の「Administration Console」をクリックして、管理者ユーザとしてログインします。管理者ユーザのIDとパスワードは上で編集した compose.yaml の中の KEYCLOAK_ADMIN と KEYCLOAK_ADMIN_PASSWORD で指定することができます。何も変更していなければどちらも admin です。

ログインできたら、テスト用のユーザを作成していきます。左上のレルム選択で「alfresco」を選択し、左側のメニューで「Users」をクリックします。

「Add user」をクリックしてテストユーザを作成します。

作成したら「Credentials」タブを選択します。

「Set password」をクリックし、パスワードを設定します。

以上でKeycloakとテストユーザの準備は完了です。

 

ACSとKeycloakの認証連携

まずはACSとKeycloakの認証連携を試します。先ほど編集した compose.yaml には元々ACSやShareのコンテナも定義されていたのでそのまま使ってもACSとKeycloakの連携は試せるのですが、この後のShareとKeycloakの連携を試す時に share-config-custom.xml を編集する時の手間が少しややこしくなってしまうので、今回はSDKで作成した開発環境を使います。まずは以下の記事を参考に、Alfresco Community Edition 23.2に対応しているAlfresco SDK 4.8で開発環境を構築します。

Alfresco SDK 4.8で開発環境を構築する

./run.sh start でコンテナが起動することを確認したら、一旦 ./run.sh stop でコンテナを停止します。

次に、以下のファイルをテキストエディタで開きます。ここで、my-all-in-one はSDKで開発環境を作る時に入力したartifactIdなので開発環境作成時に変更していたら適宜読み替えてください。

my-all-in-one/my-all-in-one-platform-docker/src/main/docker/alfresco-global.properties

適当な場所に以下の設定を追記します(192.168.1.140は先ほど .env で指定したホストのローカルネットワークのIPに書き換えてください)。

authentication.chain=identity-service1:identity-service
identity-service.enable-basic-auth=true
identity-service.auth-server-url=http://192.168.1.140:8999
identity-service.realm=alfresco
identity-service.resource=alfresco

保存したら ./run.sh build_start でAlfrescoを起動します。

起動したらブラウザで http://localhost:8180/share を開き、先ほどKeycloak上に作成したテストユーザのIDとパスワードでログインできるか確認します。

ログインできたら認証連携成功です。また、こちらの記事でご紹介したとおり、23.2から初回ログイン時にユーザIDだけでなくメールアドレスや姓・名もIdPから取得するようになっているはずなので確認してみます。

右上のユーザ名のプルダウンを開き、「あなたのプロフィール」をクリックします。プロフィール画面で「プロフィールの編集」ボタンをクリックすると、Keycloakでテストユーザを作成する時に入力した姓・名とメールアドレスが連携されていることがわかります。

以上でACSとKeycloakの認証連携の確認は完了です。

次にShareとKeycloakの連携を試したいんですが、きれいな環境で試したいのでAlfresco側のデータを ./run.sh purge で一旦全て削除します。コマンド一発でデータを初期化できるのはこういう時に便利ですね。

また、KeycloakのUsersの画面からテストユーザをクリックし、Sessionsタブを開いて「Logout all sessions」ボタンで全てのセッションからログアウトしておきます。以下のように「No sessions」と表示されていればOKです。

 

ShareとKeycloakの認証連携

以下のファイルをテキストエディタで開きます( my-all-in-one は先ほどと同様、必要に応じて読み替えてください)。

my-all-in-one/my-all-in-one-share/src/main/resources/META-INF/share-config-custom.xml

alfresco-configタグの間の任意の場所に以下の設定を追記します。ここで、192.168.1.140の部分はKeycloakの設定で .env にセットしたホストのローカルネットワークのIPに書き換えてください。

<config evaluator="string-compare" condition="AIMS">
    <enabled>true</enabled>
    <realm>alfresco</realm>
    <resource>alfresco</resource>
    <authServerUrl>http://192.168.1.140:8999</authServerUrl>
</config>

保存したら ./run.sh build_start でAlfrescoを起動します。

コンテナが起動したら、ブラウザで http://localhost:8180/share を開きます。先ほどと違い、Keycloakに転送されてKeycloak側のログイン画面が表示されるので、テストユーザのIDとパスワードを入力してログインします。

ログインできれば認証連携成功です。ユーザのプロフィール画面を開くと、先ほどと同じようにテストユーザの姓・名やメールアドレスも連携されていると思います。

以上、Alfresco Community Edition 23.2でKeycloakとのOIDC認証を試す方法のご紹介でした。スクリーンショットが多いので一見長そうに見えますが、Alfresco側は alfresco-global.properties と share-config-custom.xml に少し設定を追記するだけなので設定自体は簡単です。ぜひ試してみてください。

関連記事
customize
install

RANKING
2020.10.12
2020.11.19
2020.12.23
2020.10.05
2020.11.25