- vừa được xem lúc

Cách Tích Hợp Đăng Nhập Google, GitHub Và Facebook Trong Ứng Dụng Java (Spring Boot)

0 0 7

Người đăng: Võ Nhất Phương

Theo Viblo Asia

Việc tích hợp đăng nhập bằng Google, GitHub hoặc Facebook đang trở thành một tiêu chuẩn phổ biến trong các hệ thống web hiện đại sử dụng Java (Spring Boot). Không chỉ mang lại trải nghiệm người dùng mượt mà hơn, hình thức đăng nhập này còn giúp đơn giản hóa việc xác thực và giảm thiểu rủi ro bảo mật liên quan đến mật khẩu. Bài viết dưới đây hướng dẫn cách cấu hình đăng nhập xã hội một cách hiệu quả và dễ hiểu.

I. Tổng quan về OAuth 2.0

Tất cả các nền tảng đăng nhập xã hội lớn hiện nay đều sử dụng OAuth 2.0, một giao thức ủy quyền cho phép ứng dụng của bạn truy cập thông tin người dùng từ bên thứ ba (Google, Facebook, GitHub) mà không cần trực tiếp xử lý mật khẩu của họ. Spring Security hỗ trợ tích hợp OAuth 2.0 rất tốt thông qua spring-security-oauth2-client.

II. Chuẩn Bị Môi Trường

1. Stack đề xuất:

  • Java 17+
  • Spring Boot 3.x
  • Spring Security
  • Maven hoặc Gradle
  • Thymeleaf (hoặc bất kỳ template engine nào)
  • IDE như IntelliJ hoặc VS Code Thêm dependency trong pom.xml:
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-oauth2-client</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency>
</dependencies>

III. Cấu hình đăng nhập Google

1. Đăng ký ứng dụng Google

  • Truy cập: https://console.cloud.google.com/
  • Tạo một project mới
  • Chọn "OAuth consent screen" → chọn "External"
  • Điền các thông tin cơ bản (tên app, email)
  • Chọn "Credentials" → Tạo "OAuth 2.0 Client ID"
    • Ứng dụng: Web application
    • Authorized redirect URIs: http://localhost:8080/login/oauth2/code/google

2. Cấu hình application.yml

spring: security: oauth2: client: registration: google: client-id: YOUR_CLIENT_ID client-secret: YOUR_CLIENT_SECRET scope: profile, email 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

IV. Cấu hình đăng nhập với GitHub

1. Tạo OAuth App trên GitHub

2. Thêm vào application.yml:

spring: security: oauth2: client: registration: github: client-id: YOUR_CLIENT_ID client-secret: YOUR_CLIENT_SECRET scope: read:user,user:email

V. Cấu hình đăng nhập với Facebook

1. Tạo OAuth App trên GitHub

  • Truy cập: https://developers.facebook.com
  • Tạo App → Chọn Consumer
  • Thêm sản phẩm "Facebook Login" → Cấu hình:
    • Valid OAuth Redirect URIs: http://localhost:8080/login/oauth2/code/facebook

2. Thêm vào application.yml:

spring: security: oauth2: client: registration: facebook: client-id: YOUR_CLIENT_ID client-secret: YOUR_CLIENT_SECRET scope: email, public_profile

VI. Cấu hình Security

@Configuration
@EnableWebSecurity
public class SecurityConfig { @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http .authorizeHttpRequests(auth -> auth .requestMatchers("/", "/login**").permitAll() .anyRequest().authenticated() ) .oauth2Login() .defaultSuccessUrl("/home", true); return http.build(); }
}

VII. Hiển thị giao diện

<!-- templates/index.html -->
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head> <title>Đăng nhập</title>
</head>
<body> <h2>Đăng nhập bằng:</h2> <a href="/oauth2/authorization/google">Google</a><br> <a href="/oauth2/authorization/github">GitHub</a><br> <a href="/oauth2/authorization/facebook">Facebook</a>
</body>
</html>

VIII. Hiển thị thông tin người dùng sau khi đăng nhập

@Controller
public class HomeController { @GetMapping("/home") public String home(Model model, OAuth2AuthenticationToken authentication) { OAuth2User user = authentication.getPrincipal(); model.addAttribute("name", user.getAttribute("name")); model.addAttribute("email", user.getAttribute("email")); return "home"; }
}
<!-- templates/home.html -->
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head><title>Trang chủ</title></head>
<body> <h2>Xin chào, <span th:text="${name}"></span>!</h2> <p>Email: <span th:text="${email}"></span></p>
</body>
</html>

Hiện tại thì mình đang học môn SEO trên trường, nên trong bài viết mình xin để một link về trang web mình SEO cho môn học: https://cynhub.id.vn . Cảm ơn các bạn đã đọc bài viết.

Bình luận

Bài viết tương tự

- vừa được xem lúc

Tổng hợp các bài hướng dẫn về Design Pattern - 23 mẫu cơ bản của GoF

Link bài viết gốc: https://gpcoder.com/4164-gioi-thieu-design-patterns/. Design Patterns là gì. Design Patterns không phải là ngôn ngữ cụ thể nào cả.

0 0 317

- vừa được xem lúc

Học Spring Boot bắt đầu từ đâu?

1. Giới thiệu Spring Boot. 1.1.

0 0 290

- vừa được xem lúc

Cần chuẩn bị gì để bắt đầu học Java

Cần chuẩn bị những gì để bắt đầu lập trình Java. 1.1. Cài JDK hay JRE.

0 0 60

- vừa được xem lúc

Sử dụng ModelMapper trong Spring Boot

Bài hôm nay sẽ là cách sử dụng thư viện ModelMapper để mapping qua lại giữa các object trong Spring nhé. Trang chủ của ModelMapper đây http://modelmapper.org/, đọc rất dễ hiểu dành cho các bạn muốn tìm hiểu sâu hơn. 1.

0 0 201

- vừa được xem lúc

[Java] 1 vài tip nhỏ khi sử dụng String hoặc Collection part 1

. Hello các bạn, hôm nay mình sẽ chia sẻ về mẹo check String null hay full space một cách tiện lợi. Mình sẽ sử dụng thư viện Lớp StringUtils download file jar để import vào thư viện tại (link).

0 0 81

- vừa được xem lúc

Deep Learning với Java - Tại sao không?

Muốn tìm hiểu về Machine Learning / Deep Learning nhưng với background là Java thì sẽ như thế nào và bắt đầu từ đâu? Để tìm được câu trả lời, hãy đọc bài viết này - có thể kỹ năng Java vốn có sẽ giúp bạn có những chuyến phiêu lưu thú vị. DJL là tên viết tắt của Deep Java Library - một thư viện mã ng

0 0 154