OpenID Connect(OIDC)认证--keycloak与springboot项目的整合
在Spring Boot项目中整合Keycloak进行OpenID Connect (OIDC) 认证,你需要做以下几步:
- 添加Keycloak Spring Boot Starter依赖到你的
pom.xml
文件中。
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-spring-boot-starter</artifactId>
<version>16.1.0</version>
</dependency>
- 在
application.properties
或application.yml
中配置Keycloak的信息。
# application.properties
# Keycloak 服务器的地址
keycloak.auth-server-url=http://localhost:8080/auth
# 在Keycloak中创建的realm名称
keycloak.realm=your-realm
# 客户端ID
keycloak.resource=your-client-id
# 公钥
keycloak.public-key=公钥
# 使用内存存储用户会话
keycloak.securityConstraints[0].securityCollections[0].patterns[0]=/api/*
- 在Spring Boot应用中添加安全配置。
import org.keycloak.adapters.springboot.KeycloakSpringBootConfigResolver;
import org.keycloak.adapters.springsecurity.config.KeycloakWebSecurityConfigurerAdapter;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Profile;
import org.springframework.security.config.annotation.web.reactive.EnableWebFluxSecurity;
import org.springframework.security.config.annotation.web.reactive.WebFluxSecurityConfigurer;
import org.springframework.security.web.server.SecurityWebFilter;
@KeycloakConfiguration
public class SecurityConfig extends KeycloakWebSecurityConfigurerAdapter {
@Bean
@Override
protected KeycloakSpringBootConfigResolver keycloakConfigResolver() {
return new KeycloakSpringBootConfigResolver();
}
@Override
protected void configure(WebFluxSecurityBuilder security) throws Exception {
security
.csrf().disable()
.authorizeExchange()
.pathMatchers("/public/**").permitAll()
.anyExchange().authenticated();
}
}
- 在你的控制器或者服务中使用注解来保护路径。
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.security.access.annotation.Secured;
@RestController
@RequestMapping("/api")
public class ApiController {
@GetMapping("/protected")
@Secured("ROLE_user")
public String protectedEndpoint() {
return "Protected content";
}
}
确保你的Keycloak服务器已经配置好客户端、角色以及用户。用户需要被授予相应的角色,并且客户端应该在相应的rea
评论已关闭