[英]Spring4 + OAuth2 + CXF/JAXRS + Keycloak
尝试在我的 java spring 微服务中实现 oauth2 用法时遇到了问题。 我发现的几乎每篇文章(关于示例)都是关于 Spring Boot 和 oauth2 的。 但是我有一个带有 springSecurity.xml 的简单 Java CXF/JAXRS 微服务为了更好地理解我想要实现的目标:我有一个 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 进行身份验证/授权。
如果有人能帮助我并指出我正确的方向,我会很高兴。 也许有一些步骤或解释以获得更多的澄清。
由于您使用的是 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 Security 保护应用程序,您必须在 Spring Security 配置文件中提供一些额外的 bean,并将 Keycloak 安全过滤器添加到您的管道中:
ServletListenerRegistrationBean<HttpSessionEventPublisher>
对象中的 spring bean 或纯 spring 安全环境的 web.xml 文件中。<listener>
<listener-class>org.springframework.security.web.session.HttpSessionEventPublisher</listener-class>
</listener>
<security:authentication-manager alias="authenticationManager">
<security:authentication-provider ref="keycloakAuthenticationProvider" />
</security:authentication-manager>
<bean id="keycloakAuthenticationProvider" class="org.keycloak.adapters.springsecurity.authentication.KeycloakAuthenticationProvider" />
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
}
这就是我现在可以给你替换 springboot 注释配置的东西,这个和下面的内容应该可以帮助你将 keycloack 与普通的基于 spring xml 的客户端一起使用,
其余的 xml 可以在这里找到: https : //www.keycloak.org/docs/latest/securing_apps/#_spring_secUrity_adapter 。 这基本上是定义过滤器和端点,我相信它会特定于您的需求。 在此之后,您应该能够在没有任何自动配置注释或 springboot 启动器的情况下运行您的客户端。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.