Open Liberty 23.0.0.9におけるSpring Boot 3.0のサポートと新しいセキュリティ機能
新しいSpring Boot Support 3.0機能により、LibertyアプリケーションでSpring Boot 3.xの機能を使用できます。 また、クライアントシークレットを使うよりも安全なプライベートキー方式でOpenID Connectクライアントを認証できるようになり、LTPAやJWT Cookieを使う場合は、アプリケーションごとにコンテキストルートに応じて異なるCookieを使えるようになりました。
そして、happy birthday! Open Libertyは6歳になりました。Maker Projectにおける私たちの歴史をご参照ください。
In Open Liberty 23.0.0.9:
23.0.0.9で修正されたバグリストをご参照ください。
過去のOpen Liberty GAリリースのブログ記事もご参照ください。
23.0.0.9を使用してアプリを実行する
Mavenを使うときは下記の設定をお使いください。
<plugin>
<groupId>io.openliberty.tools</groupId>
<artifactId>liberty-maven-plugin</artifactId>
<version>3.8.2</version>
</plugin>
Gradleの場合はこちらです。
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'io.openliberty.tools:liberty-gradle-plugin:3.6.2'
}
}
apply plugin: 'liberty'
コンテナ・イメージの場合はこちらです。
FROM icr.io/appcafe/open-liberty
またはダウンロード・ページをご参照ください。
Spring Boot 3.0 サポート
Liberty Spring Boot Support 3.0フィーチャーは、Liberty上でSpring Boot 3.0アプリケーションを実行するための、より完全なサポートを提供します。また、コンテナでアプリケーションを作成する際に、 thin the application の機能を提供します。
Libertyの以前のリリースでは、Spring Boot 1.5とSpring Boot 2.0のアプリケーションを提供していました。 また、LibertyはWARファイルとしてパッケージ化されたSpring Bootアプリケーションもサポートしていました。 最新のブログ記事 で紹介されています。 Open Liberty 23.0.0.9では、`springBoot-3.0`フィーチャーを有効にすることで、Spring Boot 3.xアプリケーションをデプロイすることができます。
Liberty上でSpring Boot 3.xアプリケーションを実行するには、Java 17以上で実行する必要があります。 さらに、アプリケーションがJakarta Servlet機能を使う場合は、Jakarta Servet 6.0でなければなりません。以下の例のように、server.xml
ファイルにこれらのフィーチャーを設定します。
<features>
<feature>springBoot-3.0</feature>
<feature>servlet-6.0</feature>
</features>
以前のバージョンのSpring Boot Supportフィーチャーと同様に、Spring BootアプリケーションのJARファイルを /dropins/spring/
ディレクトリに置くことができます。 あるいは、server.xml
ファイルに Spring Bootの設定エレメント を指定します。例えば:
<springBootApplication id="spring-boot-app" location="spring-boot-app-0.1.0.jar" name="spring-boot-app" />
詳細については、Spring Bootアプリケーションの設定とデプロイを参照してください。
以前のバージョンのSpring Bootサポートフィーチャーを使用していて、Spring Boot 3を使用するようにアプリケーションを移行する場合は、以下の要件に注意してください。
-
Jakarta EE 10フィーチャーを使用する必要があります。
-
セキュリティ設定にはアプリケーション内での修正が必要です。
-
新しいserver template (
springBoot3
)の利用が可能です。
OIDCクライアントにおける秘密鍵JWT認証のサポート
Liberty の OpenID Connect クライアントは、OpenID Connect トークンのエンドポイントで private_key_jwt
クライアント認証メソッドをサポートするようになりました。
OpenID Connectクライアントは、プロバイダのトークンエンドポイントを呼び出す際に、OpenID Connectプロバイダに認証データを提供する必要があります。
クライアントはいくつかの異なる方法で認証することができるが、それらの方法のほとんどはクライアントの秘密を必要とします。
private_key_jwt
認証メソッドを使用すると、クライアントはクライアントシークレットの代わりに非対称キーを使用して署名付き JSON Web Tokens (JWT) を作成し、認証を行うことができます。
この認証方式を使用する OpenID Connect クライアントは、クライアントシークレットを持つ必要がなくなりました。
クライアントアプリケーションでは、tokenEndpointAuthMethod
属性の private_key_jwt
オプションと、クライアントの server.xml
ファイルの openidConnectClient
要素または oidcLogin
要素の tokenEndpointAuthSigningAlgorithm
属性と keyAliasName
属性を使用して、この機能を有効にします。
例えば、OpenID Connect Clientフィーチャーを使用する場合、以下の設定を含めます。
<featureManager>
<feature>openidConnectClient-1.0</feature>
</featureManager>
...
<openidConnectClient tokenEndpointAuthMethod="private_key_jwt" keyAliasName="privateKeyJwtAliasRS512" ... />
ソーシャルメディア・ログイン機能を使用する場合は、以下の設定を含めます。
<featureManager>
<feature>socialLogin-1.0</feature>
</featureManager>
...
<oidcLogin tokenEndpointAuthMethod="private_key_jwt" tokenEndpointAuthSigningAlgorithm="E512" keyAliasName="privateKeyJwtAliasES512" ... />
tokenEndpointAuthSigningAlgorithm
属性は、クライアント認証に使われる JWT に署名するアルゴリズムを指定します。keyAliasName
属性は JWT に署名するために使用する鍵を指し、秘密鍵に対応する公開鍵の別名でなければなりません。秘密鍵は、OIDCクライアント構成で sslRef
によって参照されるSSL構成によって指定されるキーストアになければなりません。公開鍵は以下のいずれかの場所にある必要があります。
-
trustStoreRef
属性で指定されたトラストストア -
sslRef
によって参照されるSSL設定によって指定されるトラストストア -
sslRef
で参照されるSSL設定によって指定されるキーストア
設定オプションの詳細については、ドキュメントをご参照ください。
JWT認証の詳細については、以下を参照してください。
用途に応じてLTPA/JWT Cookieを使い分ける
以前のリリースでは、LTPAとJWTのCookieは常にCookieパスが`/`に設定されていたので、ドメイン上のどのパスに対して行われたリクエストもCookieを含んでいました。LTPAまたはJWTクッキーのパスをアプリケーションコンテキストルートに設定できるようになりました。この設定によって、アプリケーションごとに異なる LTPA と JWT トークンを使うことができます。
` webAppSecurity` エレメントの useContextRootForSSOCookiePath
属性を有効にします。例えば、server.xml
に以下の行を追加します。
<webAppSecurity useContextRootForSSOCookiePath="true"/>
Open LibertyのLTPAの詳細については、ドキュメントをご参照ください。
今すぐOpen Liberty 23.0.0.9を入手する
Gradle, Docker,ダウンロード可能なアーカイブからも入手可能です。