Integrar com Spring Boot
Adicione autenticação OIDC à sua aplicação Spring Boot em minutos usando Spring Security OAuth2 Client.
Spring Security OAuth2 ClientAdicionar dependência Maven
Adicione as dependências do Spring Security OAuth2 Client e do Spring Security ao seu pom.xml. O spring-boot-starter-oauth2-client já inclui o suporte a OpenID Connect e gerencia o ciclo de vida dos tokens automaticamente.
<dependencies>
<!-- Spring Security -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<!-- OAuth2 Client com suporte a OIDC -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>
<!-- Web MVC (se ainda não estiver presente) -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>Se você usa Gradle, adicione implementation "org.springframework.boot:spring-boot-starter-oauth2-client" no bloco dependencies do build.gradle.
Configurar application.yml
Registre o Sentinel como provedor OIDC nas configurações do Spring. O issuer-uri permite que o Spring descubra automaticamente os endpoints de autorização, token e JWKS via OpenID Connect Discovery.
spring:
security:
oauth2:
client:
registration:
sentinel:
client-id: <SEU_CLIENT_ID>
client-secret: <SEU_CLIENT_SECRET>
scope:
- openid
- profile
- email
redirect-uri: http://localhost:8080/login/oauth2/code/sentinel
authorization-grant-type: authorization_code
client-authentication-method: client_secret_basic
provider:
sentinel:
issuer-uri: https://auth.sentinel-identity.comSubstitua <SEU_CLIENT_ID> e <SEU_CLIENT_SECRET> pelos valores gerados em sentinel-admin → OAuth2 Clients → New Client. Nunca commite o client-secret no repositório — use variáveis de ambiente ou um gerenciador de segredos.
Configurar o SecurityFilterChain
Crie uma classe de configuração que define quais rotas exigem autenticação, ativa o fluxo de login OIDC e habilita o logout federado (RP-Initiated Logout) para encerrar também a sessão no Sentinel.
package com.exemplo.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.web.SecurityFilterChain;
@Configuration
@EnableWebSecurity
@EnableMethodSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests(authorize -> authorize
.requestMatchers("/", "/public/**").permitAll()
.anyRequest().authenticated()
)
.oauth2Login(oauth2 -> oauth2
.loginPage("/oauth2/authorization/sentinel")
)
.logout(logout -> logout
.logoutSuccessUrl("/")
.invalidateHttpSession(true)
.clearAuthentication(true)
.deleteCookies("JSESSIONID")
);
return http.build();
}
}@EnableMethodSecurity habilita as anotações @PreAuthorize e @PostAuthorize nos controllers e services.
Acessar o usuário autenticado
Injete o OidcUser via @AuthenticationPrincipal nos métodos do controller para acessar os claims do token de identidade, como nome, e-mail e subject (sub).
package com.exemplo.controller;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.security.oauth2.core.oidc.user.OidcUser;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Map;
@RestController
public class UserController {
@GetMapping("/me")
public Map<String, Object> currentUser(
@AuthenticationPrincipal OidcUser oidcUser) {
return Map.of(
"sub", oidcUser.getSubject(),
"name", oidcUser.getFullName(),
"email", oidcUser.getEmail()
);
}
}OidcUser implementa OAuth2User, então você pode usar ambos os tipos como parâmetro. Prefira OidcUser quando precisar de claims OIDC como email_verified.
Proteger endpoints com @PreAuthorize
Use @PreAuthorize para controle de acesso declarativo em nível de método. As authorities disponíveis são os scopes do token (prefixados com SCOPE_) e os roles configurados no Sentinel.
package com.exemplo.controller;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.security.oauth2.core.oidc.user.OidcUser;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Map;
@RestController
@RequestMapping("/admin")
public class AdminController {
@GetMapping("/dados")
@PreAuthorize("hasAuthority('SCOPE_profile')")
public Map<String, Object> dadosProtegidos(
@AuthenticationPrincipal OidcUser oidcUser) {
return Map.of(
"mensagem", "Acesso autorizado",
"usuario", oidcUser.getEmail()
);
}
}Para roles customizadas (ex.: ROLE_ADMIN), configure um mapper de claims no sentinel-admin para incluí-las no token como um claim groups ou roles.