Open Libertyおよび製品版のWebSphere Libertyについて,2023年7月にリリースされた22.0.0.7から2023年9月の23.0.0.9までで追加された新機能について紹介します。また,これ以外にも多くのバグやCVE脆弱性が修正されています。
前回の記事はこちらです→ Liberty最新情報:2023年3月〜2023年6月
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アプリケーションも実行することができました。
今回のバージョンで,JAR形式のSpring Boot 3.0アプリケーションの実行もサポートされるようになりました。Java 17以降のJDKを使用し,以下のように構成してください。
<features>
<feature>springBoot-3.0</feature>
<feature>servlet-6.0</feature>
</features>
JARファイルは${server.config.dir}/dropins/spring/
におくことができ,追加の構成なしで利用することができます。また,${server.config.dir}/apps
にJARファイルを置き,以下のように構成することでも利用できます。
<springBootApplication id="spring-boot-app" name="spring-boot-app"
location="spring-boot-app-0.1.0.jar" />
サーバー作成時に使用できるテンプレートとして,springBoot3
も追加されています。以下のように利用してください。
$ 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
属性を追加してください。
<featureManager>
<feature>openidConnectClient-1.0</feature>
</featureManager>
...
<openidConnectClient pkceCodeChallengeMethod="S256" ... />
ソーシャルメディアログインFeature(socialLogin-1.0
)を使用する場合,以下のように同属性を追加してください。
<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の記述を参照してください。
LTPA/JWTで使用するCookieのパス
Libertyでは,SSO(Single Sign On)に使用するLTPAやJWTのCookieを,/
のパスで設定しています。そのため,一つのサーバー上に二つ以上のアプリケーションが導入されているとき,それぞれで独立した認証を使用することができませんでした。
2023年9月にでたVersion 23.0.0.9から,これらのCookieのパスにアプリケーションのコンテキスト・ルートを指定できるようになりました。<webAppSecurity>
要素にuseContextRootForSSOCookiePath
属性を指定してください。
<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およびLiberty SPIのJavadocが掲載されるようになりました。これまでは製品版のWebSphere Libertyのマニュアルを参照する必要があったのですが,情報についてはOpen Liberty側に寄せるような形になっています。