Step-by-step Guid: Google Authentication with Spring Boot
1. Create a project
You can use Spring Initializr and select the following dependencies:
- Spring Web
- Spring Security
- OAuth2 Client
- Thymeleaf (optional, for testing UI)
Or you can add them in your pom.xml
:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.thymeleaf.extras</groupId>
<artifactId>thymeleaf-extras-springsecurity6</artifactId>
</dependency>
2. Create Google OAuth Credentials
Go to Google Cloud Console:
- Create a project.
- Navigate to "APIs & Service" > "Credentials"
- Click "Create Credentials" > "OAuth 2.0 Client IDs"
- Set:
- Application type: "Web application"
- Name:
Your project name
- Authorized redirect URIs:
http://localhost:8080/login/oauth2/code/google
Copy theClient ID
andClient Secret
.
3. Configure application.yml
or application.properties
Using application.yml
:
spring:
security:
oauth2:
client:
registration:
google:
client-id: YOUR_CLIENT_ID
client-secret: YOUR_CLIENT_SECRET
scope:
- email
- profile
provider:
google:
authorization-uri: https://accounts.google.com/o/oauth2/v2/auth
token-uri: https://oauth2.googleapis.com/token
user-info-uri: https://www.googleapis.com/oauth2/v3/userinfo
user-name-attribute: sub
4. Create a Security Configuration
Spring Boot auto-configures basic OAuth login, but you can customize with security config:
// src/main/java/com.example.demo/SecurityConfig.java
import org.springframework.context.annotation.Bean;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.context.annotation.Configuration;
@Configuration
public class SecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests(authorize -> authorize
.requestMatchers("/", "/css/**", "/js/**").permitAll()
.anyRequest().authenticated()
)
.oauth2Login(); // Enables Google OAuth login
return http.build();
}
}
5. Create a Simple Controller
// src/main/java/com.example.demo/MainController.java
import org.springframework.security.oauth2.client.authentication.OAuth2AuthenticationToken;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class MainController {
@GetMapping("/")
public String home() {
return "home"; // a public page
}
@GetMapping("/dashboard")
public String dashboard(Model model, OAuth2AuthenticationToken authentication) {
Map<String, Object> attributes = authentication.getPrincipal().getAttributes();
model.addAttribute("name", attributes.get("name"));
model.addAttribute("email", attributes.get("email"));
return "dashboard"; // Secured page
}
}
6. Create Template
Create the file at: src/main/resources/templates/home.html
<!-- home.html -->
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Home</title>
</head>
<body>
<h1>Welcome to the public home page</h1>
<a href="/dashboard">Go to Dashboard</a>
</body>
</html>
Create the file at: src/main/resources/templates/dashboard.html
<!-- dashboard.html -->
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Dashboard</title>
</head>
<body>
<h1>Welcome to the secure dashboard page</h1>
<a href="/">Home</a>
</body>
</html>
7. Run and Test
- Run your Spring Boot app.
- Navigate to
http://localhost:8080/dashboard
- You'll be redirected to Google for login.
- After login, you'll return to
/dashboard
with your authenticated session.
Top comments (0)
Some comments may only be visible to logged-in visitors. Sign in to view all comments.