Spring4 + OAuth2 + CXF/JAXRS + 密钥斗篷
Spring4 + OAuth2 + CXF/JAXRS + Keycloak
我在 java spring 微服务中尝试实现 oauth2 使用时遇到了困难。我发现的几乎每篇文章(关于示例)都是关于 Spring Boot 和 oauth2。但是我有一个简单的 Java CXF/JAXRS 微服务和 springSecurity.xml
为了更好地理解我想要实现的目标:我有一个 Java 微服务,它可以与其他微服务通信。它没有任何前端,它只是一个后端服务。它包括 openAPI/swagger 用于文档目的,并使用 swagger-ui(通过 maven 插件包含)来测试端点。我知道配置 swagger-ui 是我稍后必须采取的另一个步骤。首先,我想使用 oauth2 来保护我的微服务。
我发现的至少看起来有点像我正在寻找的是:
https://github.com/tfeng/play-oauth2/blob/master/conf/spring/security-context.xml
我以前的安全-context.xml 看起来像这样:
<sec:http pattern="/rest/**">
<sec:csrf disabled="true" />
<sec:intercept-url access="isAuthenticated()"
pattern="/**" />
<sec:http-basic />
</sec:http>
<sec:http>
<sec:csrf disabled="true" />
<sec:intercept-url access="isAuthenticated()"
pattern="/**" />
<sec:http-basic />
<sec:logout />
</sec:http>
<sec:authentication-manager>
<sec:authentication-provider>
<sec:user-service>
<sec:user authorities="" name="myApiUser" password="my4p1Secr3t" />
</sec:user-service>
</sec:authentication-provider>
</sec:authentication-manager>
在最好的情况下,我可以配置我的微服务和 swagger-ui 以将 Keycloak 用于 authentication/authorization。
如果有人能帮助我并指出正确的方向,我会很高兴。可能需要一些步骤或解释才能更清楚。
由于您使用的是 spring xml 配置,据我了解,您希望手动定义 springboot 的自动配置和扫描所做的配置。
首先,假设您在 pom.xml
中定义了依赖项,则需要组件扫描 keycloak 包 org.keycloak.adapters.springsecurity
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-spring-security-adapter</artifactId>
<version>14.0.0</version>
</dependency>
要使用 Spring 安全性保护应用程序,您必须在 Spring 安全配置文件中提供一些额外的 bean,并将 Keycloak 安全过滤器添加到您的管道中:
- 为了单点退出正常工作,你必须定义一个会话监听器,ether 作为一个 spring bean 包装在一个
ServletListenerRegistrationBean<HttpSessionEventPublisher>
对象中
或者在您的 web.xml 文件中用于纯 spring 安全环境。
<listener>
<listener-class>org.springframework.security.web.session.HttpSessionEventPublisher</listener-class>
</listener>
- 现在您的侦听器已就位并扫描了 keycloak bean,您可以开始定义您的身份验证管理器和提供程序。
<security:authentication-manager alias="authenticationManager">
<security:authentication-provider ref="keycloakAuthenticationProvider" />
</security:authentication-manager>
<bean id="keycloakAuthenticationProvider" class="org.keycloak.adapters.springsecurity.authentication.KeycloakAuthenticationProvider" />
- 您的 json 客户端应用程序配置通过
adapterDeploymentContext
bean 加载,它指定客户端应如何与 auth-server 通信。
<bean id="adapterDeploymentContext" class="org.keycloak.adapters.springsecurity.AdapterDeploymentContextFactoryBean">
<constructor-arg value="/WEB-INF/keycloak.json" />
</bean>
这是一个 json 文件的示例,用于一个名为 plantarium 的项目,
{
"realm" : "plantarium",
"resource" : "plantarium-plants",
"use-resource-role-mappings" : true,
"auth-server-url" : "${env.AUTH_SERVER_URL:http://0.0.0.0:8080/auth}",
"ssl-required" : "external",
"enable-cors" : true,
"cors-max-age" : 1000,
"cors-allowed-methods" : "POST, PUT, DELETE, GET",
"cors-exposed-headers" : "WWW-Authenticate, My-custom-exposed-Header",
"bearer-only" : false,
"expose-token" : true,
"principal-attribute": "preferred_username",
"verify-token-audience" : false,
"connection-pool-size" : 20,
"disable-trust-manager": true,
"allow-any-hostname" : false,
"token-minimum-time-to-live" : 10,
"min-time-between-jwks-requests" : 10,
"public-key-cache-ttl": 86400,
"confidential-port": 0
}
这是我现在可以给你的替换 spring 引导注释配置的东西,这个和下面的应该可以帮助你使用 keycloack 和普通的旧 spring xml基于客户,
xml 的其余部分可以在这里找到:https://www.keycloak.org/docs/latest/securing_apps/#_spring_secUrity_adapter。这基本上是定义过滤器和端点,我相信它会特定于您的需求。在此之后,您应该能够 运行 您的客户端,而无需任何自动配置注释或 spring 引导程序。
我在 java spring 微服务中尝试实现 oauth2 使用时遇到了困难。我发现的几乎每篇文章(关于示例)都是关于 Spring Boot 和 oauth2。但是我有一个简单的 Java CXF/JAXRS 微服务和 springSecurity.xml 为了更好地理解我想要实现的目标:我有一个 Java 微服务,它可以与其他微服务通信。它没有任何前端,它只是一个后端服务。它包括 openAPI/swagger 用于文档目的,并使用 swagger-ui(通过 maven 插件包含)来测试端点。我知道配置 swagger-ui 是我稍后必须采取的另一个步骤。首先,我想使用 oauth2 来保护我的微服务。
我发现的至少看起来有点像我正在寻找的是: https://github.com/tfeng/play-oauth2/blob/master/conf/spring/security-context.xml 我以前的安全-context.xml 看起来像这样:
<sec:http pattern="/rest/**">
<sec:csrf disabled="true" />
<sec:intercept-url access="isAuthenticated()"
pattern="/**" />
<sec:http-basic />
</sec:http>
<sec:http>
<sec:csrf disabled="true" />
<sec:intercept-url access="isAuthenticated()"
pattern="/**" />
<sec:http-basic />
<sec:logout />
</sec:http>
<sec:authentication-manager>
<sec:authentication-provider>
<sec:user-service>
<sec:user authorities="" name="myApiUser" password="my4p1Secr3t" />
</sec:user-service>
</sec:authentication-provider>
</sec:authentication-manager>
在最好的情况下,我可以配置我的微服务和 swagger-ui 以将 Keycloak 用于 authentication/authorization。
如果有人能帮助我并指出正确的方向,我会很高兴。可能需要一些步骤或解释才能更清楚。
由于您使用的是 spring xml 配置,据我了解,您希望手动定义 springboot 的自动配置和扫描所做的配置。 首先,假设您在 pom.xml
中定义了依赖项,则需要组件扫描 keycloak 包org.keycloak.adapters.springsecurity
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-spring-security-adapter</artifactId>
<version>14.0.0</version>
</dependency>
要使用 Spring 安全性保护应用程序,您必须在 Spring 安全配置文件中提供一些额外的 bean,并将 Keycloak 安全过滤器添加到您的管道中:
- 为了单点退出正常工作,你必须定义一个会话监听器,ether 作为一个 spring bean 包装在一个
ServletListenerRegistrationBean<HttpSessionEventPublisher>
对象中 或者在您的 web.xml 文件中用于纯 spring 安全环境。
<listener>
<listener-class>org.springframework.security.web.session.HttpSessionEventPublisher</listener-class>
</listener>
- 现在您的侦听器已就位并扫描了 keycloak bean,您可以开始定义您的身份验证管理器和提供程序。
<security:authentication-manager alias="authenticationManager">
<security:authentication-provider ref="keycloakAuthenticationProvider" />
</security:authentication-manager>
<bean id="keycloakAuthenticationProvider" class="org.keycloak.adapters.springsecurity.authentication.KeycloakAuthenticationProvider" />
- 您的 json 客户端应用程序配置通过
adapterDeploymentContext
bean 加载,它指定客户端应如何与 auth-server 通信。
<bean id="adapterDeploymentContext" class="org.keycloak.adapters.springsecurity.AdapterDeploymentContextFactoryBean">
<constructor-arg value="/WEB-INF/keycloak.json" />
</bean>
这是一个 json 文件的示例,用于一个名为 plantarium 的项目,
{
"realm" : "plantarium",
"resource" : "plantarium-plants",
"use-resource-role-mappings" : true,
"auth-server-url" : "${env.AUTH_SERVER_URL:http://0.0.0.0:8080/auth}",
"ssl-required" : "external",
"enable-cors" : true,
"cors-max-age" : 1000,
"cors-allowed-methods" : "POST, PUT, DELETE, GET",
"cors-exposed-headers" : "WWW-Authenticate, My-custom-exposed-Header",
"bearer-only" : false,
"expose-token" : true,
"principal-attribute": "preferred_username",
"verify-token-audience" : false,
"connection-pool-size" : 20,
"disable-trust-manager": true,
"allow-any-hostname" : false,
"token-minimum-time-to-live" : 10,
"min-time-between-jwks-requests" : 10,
"public-key-cache-ttl": 86400,
"confidential-port": 0
}
这是我现在可以给你的替换 spring 引导注释配置的东西,这个和下面的应该可以帮助你使用 keycloack 和普通的旧 spring xml基于客户,
xml 的其余部分可以在这里找到:https://www.keycloak.org/docs/latest/securing_apps/#_spring_secUrity_adapter。这基本上是定义过滤器和端点,我相信它会特定于您的需求。在此之后,您应该能够 运行 您的客户端,而无需任何自动配置注释或 spring 引导程序。