在當今的應用程式開發中,使用社交媒體帳號進行登入已成為一種趨勢。透過社交媒體登入,不僅可以提高使用者的登入便利性,還能簡化註冊流程。這篇文章將指導你如何使用 Spring Security 與 OAuth2 整合第三方登入方式,例如 Google 或 Facebook
首先添加以下依賴
<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-web</artifactId>
</dependency>
首先,前往 Google Cloud Console 來創建一個 OAuth 2.0 憑證。
前往 Facebook Developers 設定 Facebook 登入:
在你的 src/main/resources/application.yml 檔案中,添加以下配置
spring:
security:
oauth2:
client:
registration:
google:
client-id: YOUR_GOOGLE_CLIENT_ID
client-secret: YOUR_GOOGLE_CLIENT_SECRET
scope: profile, email
facebook:
client-id: YOUR_FACEBOOK_APP_ID
client-secret: YOUR_FACEBOOK_APP_SECRET
scope: public_profile, email
provider:
google:
authorization-uri: https://accounts.google.com/o/oauth2/auth
token-uri: https://oauth2.googleapis.com/token
user-info-uri: https://www.googleapis.com/oauth2/v3/userinfo
user-name-attribute: sub
facebook:
authorization-uri: https://www.facebook.com/v10.0/dialog/oauth
token-uri: https://graph.facebook.com/v10.0/oauth/access_token
user-info-uri: https://graph.facebook.com/me?fields=id,name,email
user-name-attribute: id
```
確保你將 YOUR_GOOGLE_CLIENT_ID、YOUR_GOOGLE_CLIENT_SECRET、YOUR_FACEBOOK_APP_ID 和 YOUR_FACEBOOK_APP_SECRET 替換為你在之前步驟中獲取的憑證
接下來,建立一個安全配置類別來配置 Spring Security
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/", "/login", "/webjars/**").permitAll()
.anyRequest().authenticated()
.and()
.oauth2Login();
}
}
在這個配置中,我們允許公共路徑 /、/login 和 /webjars/** 被所有人訪問,而其他的路徑則需要身份驗證
為了顯示首頁和登入的功能,我們需要建立一個簡單的 Controller
@Controller
public class HomeController {
@GetMapping("/")
public String home() {
return "home"; // 需建立 home.html
}
@GetMapping("/login")
public String login() {
return "login"; // 需建立 login.html
}
}
在 src/main/resources/templates 目錄下,創建 home.html 和 login.html 文件
home.html
在這篇文章中,我們學會了如何使用 Spring Security 與 OAuth2 整合第三方登入方式。透過簡單的配置,我們可以讓使用者輕鬆地使用他們的社交媒體帳戶登入應用程式