Open Liberty / WebSphere Liberty最新情報：2023年7月〜2023年9月

Open Libertyおよび製品版のWebSphere Libertyについて，2023年7月にリリースされた22.0.0.7から2023年9月の23.0.0.9までで追加された新機能について紹介します。また，これ以外にも多くのバグやCVE脆弱性が修正されています。

前回の記事はこちらです→　[Liberty最新情報：2023年3月〜2023年6月](https://qiita.com/TTakakiyo/items/e48d29c8169ea7f61160)

# API

## Spring Boot 3.0対応

2023年9月にでたVersion 23.0.0.9より，Liberty上でSpring Boot 3.0アプリケーションを実行できるようになりました。

過去のバージョンでは，Spring Boot 1.5およびSpring Boot 2.xアプリケーションのサポートが提供されていました。また，[WAR形式でパッケージされたSpring Boot 3.0アプリケーションも実行](https://openliberty.io/blog/2023/06/15/running-spring-boot-3.html)することができました。

今回のバージョンで，JAR形式のSpring Boot 3.0アプリケーションの実行もサポートされるようになりました。Java 17以降のJDKを使用し，以下のように構成してください。

```xml
<features>
   <feature>springBoot-3.0</feature>
   <feature>servlet-6.0</feature>
</features>
```

JARファイルは`${server.config.dir}/dropins/spring/`におくことができ，追加の構成なしで利用することができます。また，`${server.config.dir}/apps`にJARファイルを置き，以下のように構成することでも利用できます。

```xml
<springBootApplication id="spring-boot-app" name="spring-boot-app"
    location="spring-boot-app-0.1.0.jar" />
```

サーバー作成時に使用できるテンプレートとして，`springBoot3`も追加されています。以下のように利用してください。

```terminal
$ server create myserver --template=springBoot3
```

Spring Boot 3.xアプリケーション内でJava EE/Jakarta EEの機能を使用する場合は，Jakarta EE 10に含まれるバージョンを使用する必要があります。

# Security

## Proof Key for Code Exchange (PKCE)対応

2023年8月にでたVersion 23.0.0.8から，LibertyのOpenID Connectクライアントで，認証コード傍受攻撃を防止するための仕組みProof Key for Code Exchange (PKCE)に対応しました。

PKCEはRFC 7636で標準化されています。常に特殊なシナリオでは，悪意のあるアプリケーションが正規のOAuth 2.0クライアント向けの認証コードを傍受し，その認証コードを使用してクライアントに代わってアクセストークンとIDトークンを取得する可能性があります。これを防止するため，PKCEでは追加の手順とリクエストパラメーターが導入されています。

OpenID ConnectクライアントFeature（`openidConnectClient-1.0`）を使用する場合，以下のように`pkceCodeChallengeMethod`属性を追加してください。

```xml
<featureManager>
    <feature>openidConnectClient-1.0</feature>
</featureManager>
    ...
<openidConnectClient pkceCodeChallengeMethod="S256" ... />
```

ソーシャルメディアログインFeature（`socialLogin-1.0`）を使用する場合，以下のように同属性を追加してください。

```xml
<featureManager>
    <feature>socialLogin-1.0</feature>
</featureManager>
    ...
<oidcLogin pkceCodeChallengeMethod="S256" ... />
```

## 秘密鍵JWT認証のサポート

2023年9月にでたVersion 23.0.0.9から，LibertyのOpenID Connectクライアントで，OpenID Connectトークン・エンドポイントでの`private_key_jwt`クライアント認証メソッドをサポートするようになりました。

OpenID Connectクライアントは、プロバイダのトークンエンドポイントを呼び出す際に、OpenID Connectプロバイダに認証データを提供する必要があります。クライアントはいくつかの方法で認証することができますが、そのほとんどはクライアントシークレットを必要とします。`private_key_jwt`認証メソッドを使用すると、クライアントはクライアント秘密の代わりに非対称キーを使用して署名付きJSON Webトークン（JWT）を作成し、認証を行うことができます。この認証方式を使用するOpenID Connectクライアントは、クライアントシークレットを持つ必要がなくなりました。

詳細な構成方法については[OpenLiberty.ioのBlog](https://openliberty.io/blog/2023/09/19/23.0.0.9.html#jwt)の記述を参照してください。

## LTPA/JWTで使用するCookieのパス

Libertyでは，SSO（Single Sign On）に使用するLTPAやJWTのCookieを，`/`のパスで設定しています。そのため，一つのサーバー上に二つ以上のアプリケーションが導入されているとき，それぞれで独立した認証を使用することができませんでした。

2023年9月にでたVersion 23.0.0.9から，これらのCookieのパスにアプリケーションのコンテキスト・ルートを指定できるようになりました。`<webAppSecurity>`要素に`useContextRootForSSOCookiePath`属性を指定してください。

```xml
<webAppSecurity useContextRootForSSOCookiePath="true"/>
```

これにより，Set-Cookieのパスにアプリケーションのコンテキスト・ルートが指定され，アプリケーションごとに異なるLTPAトークンを使用することができるようになります。

# ツール

## `featureUtility installFeature`コマンドの動作変更

`featureUtility installFeature <Feature名>`で特定のFeatureを指定してLiberty環境にインストールする際に，サーバー構成によっては，依存関係のFeatureが完全に導入されないことがあったため，安全側にたおし，必要になる可能性のあるFeatureも追加で導入されるようになりました。

`featureUtility installServerFeatures <サーバー名>`でFeatureを導入する場合は，従来から必要なFeatureは全て導入されるため，動作の変更はありません。

# Documentation

## Liberty API/SPI Javadoc

2023年7月から，OpenLiberty.ioのドキュメントページに[Liberty API](https://openliberty.io/docs/latest/reference/api/open-liberty-apis.html)および[Liberty SPI](https://openliberty.io/docs/latest/reference/spi/open-liberty-spis.html)のJavadocが掲載されるようになりました。これまでは製品版のWebSphere Libertyのマニュアルを参照する必要があったのですが，情報についてはOpen Liberty側に寄せるような形になっています。