alfresco-keycloakを使ってみる(2, Keycloak設定編)
今回はKeycloakを設定します。こちらも罠だらけです。
はまったときは下のjsonファイルをダウンロードし、Realmを作成してそちらで試してみてください。(これ以降test-realm.jsonと呼びます)
1. Keycloakにfeaturesを追加
プレビュー版の機能である、token-exchange
とadmin_fine_grained_authz
が必要です。
Dockerfileをお使いの方はENV KC_FEATURES=token-exchange,admin_fine_grained_authz
と書いておけばよいでしょう。
公式のドキュメントには
admin_fine_grained_authz
が必要とは書いていないのですが、
Red Hatのドキュメント
にはtoken_exchange
を使うには必要だと書いてあるので入れておきます。
実際入れていないとPermissionsの設定ができないので、よくわからないエラー
(token-exchangeのPermissionがないときに出るaudience not found
とか、
alfrescoクライアントのPermissionsタブから設定をおこなわないと出るclient not allowed to exchange to audience
とか)
と格闘する羽目になります(そのせいで半日潰れました)。
2. Clientを追加
公式のドキュメント を参考に追加しましょう。alfresco repository用とalfresco share用が必要で、それぞれalfresco、alfresco-shareという名前で作成します。
この手間が面倒、かつjsonの構造が分かっている方は冒頭で紹介したtest-realm.jsonからClientのところだけパクってきてもいいでしょう。
そして、alfrescoの方はさらにPermissionsタブを開き(作成後じゃないと出ないはずです)、Permissions Enabledをonにします。 ここはなかなか重要です。それとtoken-exchangeを開き、alfresco-token-exchangeポリシーをApply Policyに入力します。
3. realm-managementというClientを設定する
Access Typeをconfidentialにし、AuthorizationをEnabledに変更し、 公式のドキュメントを参考にAuthorizationの設定を行います。 そろそろ冒頭のtest-realm.jsonを読む必要があるかもしれませんね。
4. Client Scopesを設定する
test-realm.jsonを読みましょう(長いので説明するとしんどいのです)。
おわりに
この四つを行えば大体動くのではないかと思います。動かない場合はKeycloak、alfresco、shareのログを見比べて頑張ってください!
alfresco、shareのログは.ampファイルのconfig/alfresco/module/acosix-keycloak/log4j.propertiesを編集して、ログレベルをDEBUGとかにすると詳しいのが見られます。
それでは。