1. 簡介
在本教程中,我們將演示如何設置 Web 應用程序的後端,該應用程序使用 Spring 的社交登錄功能。 我們將使用 Spring Boot 和 OAuth2.0 依賴項。 我們還將使用 Google 作為社交登錄提供商。
2. 註冊與社交登錄提供商
2.1. 同意屏幕配置
在我們開始項目設置之前,我們需要從社交登錄提供商處獲取 ID 和密鑰。考慮到我們正在使用 Google 作為提供商,讓我們前往他們的 API 控制枱 以開始該過程。
一旦我們到達 Google API 控制枱,我們需要創建一個新項目。選擇一個合適的項目名稱後,我們將開始獲取憑據的過程:
接下來,我們需要設置 OAuth 同意屏幕。為此,我們需要選擇以下選項:
此操作會顯示一個新頁面,其中包含更多選項:
在這裏,我們將選擇“外部”選項,以便任何擁有 Google 帳户的人都可以使用我們的應用程序進行登錄。然後,我們將點擊“創建”按鈕。
下一頁,“應用註冊編輯”要求我們提供有關我們的應用程序的一些信息。在右側菜單中,我們可以看到“應用名稱”將被使用的一些示例。
在這裏,我們想使用我們業務的名稱。此外,我們可以添加我們業務的標誌,該標誌在示例中用於説明。最後,我們需要添加“用户支持電子郵件”。此聯繫人是那些想了解更多關於其同意信息的人會聯繫的人:
在我們繼續之前,我們需要在屏幕底部添加一個電子郵件地址。此聯繫人將從 Google 處接收有關創建項目更改的通知(此處未説明)。
為了演示目的,我們將留白以下字段:
此外,我們將繼續完成下一步,而無需填寫其他內容。
在我們配置“OAuth 同意屏幕”之後,我們可以繼續設置憑據。
2.2. 憑據設置 – 密鑰和秘密
為此,我們需要選擇“憑據”選項(箭頭 1)。一個新菜單出現在頁面的中間。在它上面,我們需要選擇“創建憑據”選項(箭頭 2)。從下拉列表中,我們需要選擇“OAuth 客户端 ID”選項(箭頭 3):
接下來,我們將選擇“Web 應用程序”選項。這是我們用於演示的內容:
在選擇之後,將在頁面上出現更多元素。我們需要為我們的應用程序命名。在這種情況下,我們將使用“Spring-Social-Login”。然後,我們將提供 URL。在這種情況下,我們將使用 http://localhost:8080/login/oauth2/code/google:
在我們填寫這些字段後,我們將導航到頁面的底部並點擊“創建”按鈕。會出現一個彈出窗口,其中包含密鑰和秘密。我們可以下載 JSON 或將其存儲在本地:
我們完成了 Google 的設置。如果我們想使用其他提供商,例如 GitHub,我們需要遵循類似的過程。
3. Spring Boot 項目設置
現在,在我們添加社交登錄功能之前,我們來設置項目。 。 我們將前往 Spring Initializr 並設置一個新的 Maven 項目。 我們將保持簡單,我們將使用 Spring Web 和 OAuth2 依賴項:在我們的最愛 IDE 中打開項目並啓動它後,主頁應該如下所示:
這是 Spring Security 的默認登錄頁面。 我們將在此處添加社交登錄功能。
4. 社交登錄實現
首先,我們將創建一個名為 HomeController 的類,該類將包含兩個路由,一個公共的,一個私有的:
@GetMapping("/")
public String home() {
return "Hello, public user!";
}
@GetMapping("/secure")
public String secured() {
return "Hello, logged in user!";
}
接下來,我們需要覆蓋默認的安全配置。為此,我們需要一個新的類 SecurityConfig,該類將被註解為 @Configuration 和 @EnableWebSecurity。在配置類中,我們將配置安全過濾器。
此安全過濾器允許任何人訪問主頁 (auth.requestMatchers(“/”).permitAll()),並且任何其他請求都需要進行身份驗證:
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
return http
.authorizeHttpRequests(auth -> {
auth.requestMatchers("/").permitAll();
auth.anyRequest().authenticated();
})
.oauth2Login(Customizer.withDefaults())
.formLogin(Customizer.withDefaults())
.build();
}
}
此外,我們使用 formLogin 進行用户和密碼身份驗證,並使用 oauth2Login 進行社交媒體登錄功能。
接下來,我們需要在 applications.properties 文件中添加 ID 和密鑰:
spring.security.oauth2.client.registration.google.client-id = REPLACE_ME
spring.security.oauth2.client.registration.google.client-secret = REPLACE_ME
並且這就是全部。在我們啓動應用程序後,主頁會不同。默認情況下,它將顯示我們在公共端點中配置的消息。當我們嘗試訪問 /secure 端點時,我們將被重定向到登錄頁面,該頁面看起來如下所示:
點擊 Google 會將我們重定向到 Google 登錄頁面:
成功登錄後,我們將被重定向到我們之前設置的 /secure 端點,並且相應的消息將被顯示。
5. 結論
在本文中,我們演示瞭如何使用 OAuth2 社交登錄功能設置 Spring Boot Maven 項目。
我們使用 Google API 控制枱實現了此功能。首先,我們設置了 Google 項目和應用程序。然後,我們獲取了憑據。之後,我們設置了項目,最後,我們設置了安全配置,使社交登錄可用。