Tomcat manager画面をKeycloakで制限する （未完）

# おことわり

本記事は未完ですが、諸事情のため本日いったん投稿します。


# 目的

Tomcat manager画面を、 `tomcat-users` の代わりにKeycloakで認証させたい。


# 前提

Tomcatサイトはpodmanで作成。本記事の範囲外なので省略する。


# 実作業

## Tomcatへアダプタの導入

まずKeycloakで配布しているKeycloak Tomcat adaptorをダウンロード。

記事に従い `$TOMCAT_HOME/lib` へ展開する。

https://www.keycloak.org/docs/latest/securing_apps/index.html#_tomcat_adapter

再起動してみるが、アダプタがロードされたとはログに一切出ない。
（あとで気づいたが、ログレベルの設定を下げればよかったかも）

半信半疑で、とりあえずValveを追加してみる。

```conf/Catalina/localhost/manager.xml
<?xml version="1.0" encoding="UTF-8"?>
<Context antiResourceLocking="false" privileged="true" >
  <CookieProcessor className="org.apache.tomcat.util.http.Rfc6265CookieProcessor"
                   sameSiteCookies="strict" />

  <Valve className="org.keycloak.adapters.tomcat.KeycloakAuthenticatorValve"/>

  <Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>
</Context>
```

すると、ログに反応あり。

```catalina.log
30-Mar-2023 14:42:27.287 INFO [Catalina-utility-2] org.apache.catalina.startup.HostConfig.deployDescriptor Deploying deployment descriptor [/usr/local/tomcat/conf/Catalina/localhost/manager.xml]
30-Mar-2023 14:42:44.782 INFO [Catalina-utility-2] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
30-Mar-2023 14:42:44.787 WARN [Catalina-utility-2] org.keycloak.adapters.tomcat.AbstractKeycloakAuthenticatorValve.keycloakInit No adapter configuration. Keycloak is unconfigured and will deny all requests.
30-Mar-2023 14:42:44.817 INFO [Catalina-utility-2] org.apache.catalina.startup.HostConfig.deployDescriptor Deployment of deployment descriptor [/usr/local/tomcat/conf/Catalina/localhost/manager.xml] has finished in [17,530] ms
```

`Keycloak is unconfigured and will deny all requests.` とあるので、クライアントアダプタの読み込みは完了しているように見える。


## Keycloakでクライアントの追加

Tomcatで使うためのクライアントを、既存のRealmに追加してみる。

ちなみにKeycloakのバージョンは19.0.1（ぜんぜん追従できていない）。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50759/3ca418d3-e1d3-0513-be57-229322db15a9.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50759/7705d745-1d17-7ada-bb12-66fe718c6a4b.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50759/9115c3de-c33b-f965-52fc-74ceb01c92c7.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50759/5d7edcf4-9abd-c8b9-6086-1d5efd5f7eda.png)

設定を保存後、 `keycloak.json` をダウンロードする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50759/94189d3f-c0ba-84bc-685e-4179764d321c.png)

Tomcatの `webapps/manager/WEB-INF` 直下に配置し、 `/manager` へアクセスすると。。。

Keycloak画面へリダイレクトされるが、以下のようなエラーに。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50759/745c69a4-8f8e-2ee1-b26f-eac2fa763515.png)

そういえば、managerで必要なロール `manager-gui` を作成していなかったので作成。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50759/11a66668-00ec-1f94-9a4a-71714fbeddf6.png)

ユーザへの割り当てをしようと「Users in role」のタブを開くと、「このタブは直接指定用なので、グループやユーザ設定画面で指定したものはここに表示されないよ」とのこと。

本来はグループやユーザの画面で指定すべきなのだろうと、ユーザ画面へ遷移。

とりあえず個別にユーザ設定する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50759/7e4b917a-e464-19bf-39a2-2f0c6d3173f9.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50759/e1ce04f5-5116-ceab-4789-86e960f0430c.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50759/9e6dba65-6afc-dbc1-fd10-1d5f1ee78aee.png)

割当完了とメッセージを確認。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50759/8a1c303b-d108-c934-819f-501ca2f8bc45.png)

相変わらず解消せず。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50759/6e028532-50f6-087a-6c9f-0300788184a1.png)


```
30-Mar-2023 15:17:33.112 INFO [http-nio-8080-exec-13] org.keycloak.adapters.KeycloakDeployment.resolveUrls Loaded URLs from https://keycloak.m00m.org/realms/practice1800/.well-known/openid-configuration
30-Mar-2023 15:17:48.403 INFO [http-nio-8080-exec-15] org.keycloak.adapters.authorization.PolicyEnforcer.configurePaths No path provided in configuration.
30-Mar-2023 15:17:48.404 INFO [http-nio-8080-exec-15] org.keycloak.adapters.authorization.PolicyEnforcer.configureAllPathsForResourceServer Querying the server for all resources associated with this application.
```

Keycloakへの設定取得時に何かに失敗しているようだ。

（つづく）


# 参考

https://qiita.com/yagiaoskywalker/items/c7e9433734f2880b1aa7