back to all blogs查看所有博客帖子

Open Liberty 23.0.0.9中的Spring Boot 3.0支持和新的安全功能

image of author image of author
Laura Cowen and 张海燕 (翻译) 2023年9月19日
以其他语言提供的职位: English , 日本語 ,

您可以在您的Liberty应用程序中添加新的Spring Boot Support 3.0特性来使用Spring Boot 3.x的功能。现在还可以使用私钥对OpenID Connect客户端进行身份验证,这比使用客户端秘钥更安全。如果使用LTPA或JWT cookies,现在可以根据上下文根为不同的应用程序使用不同的cookies。

最后,生日快乐!Open Liberty已经成立6年了,可以看看我们项目的创建历史

Open Liberty 23.0.0.9里:

查看23.0.0.9里修复的bug列表.

使用23.0.0.9运行应用程序

如果您正在使用Maven, 在您的pom.xml文件里包含以下内容:

<plugin>
    <groupId>io.openliberty.tools</groupId>
    <artifactId>liberty-maven-plugin</artifactId>
    <version>3.8.2</version>
</plugin>

或者对于Gradle, 在您的 build.gradle文件里包含以下内容:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'io.openliberty.tools:liberty-gradle-plugin:3.6.2'
    }
}
apply plugin: 'liberty'

或者如果您使用容器镜像:

FROM icr.io/appcafe/open-liberty

或者看看我们的下载页面.

Ask a question on Stack Overflow

支持Spring Boot 3.0

Liberty Spring Boot 3.0特性为在Liberty上运行Spring Boot 3.0的应用程序提供了更完整的支持。它还提供了在容器中创建应用程序时精简应用程序的功能。

之前的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的应用程序,可以同时支持JAR和WAR文件类型。

在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 Support特性,现在正在将您的应用程序迁移到Spring Boot 3,请注意以下要求:

支持OIDC客户端的私钥JWT认证

Liberty中的OpenID Connect客户端现在支持带有OpenID Connect令牌端点的‘private_key_jwt’客户端身份验证方法。

当OpenID Connect客户端调用OpenID Connect提供程序的令牌端点时,需要向OpenID Connect提供程序提供身份验证数据。客户端可以使用几种不同的方法进行身份验证,但大多数方法都需要客户端密钥。‘private_key_jwt’身份验证方法使客户端能够使用非对称密钥来创建签名的JSON Web令牌(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 cookies总是将cookie路径设置为/,因此向域上的任何路径发出的任何请求都包含该cookie。现在可以将LTPA或JWT cookie路径设置为应用程序上下文根目录。通过这种配置,您可以为不同的应用程序使用不同的LTPA和JWT令牌。

在‘webAppSecurity’元素中启用‘useContextRootForSSOCookiePath’属性。例如,在‘server.xml’中添加以下行:

<webAppSecurity useContextRootForSSOCookiePath="true"/>

有关Open Liberty中LTPA的更多信息,请参阅文档:

现在就开始使用Liberty 23.0.0.9