Google OAuth2でSpring Bootアプリにログインする方法を完全ガイド!初心者でもわかる設定手順
新人
「先輩、Spring BootのアプリにGoogleアカウントでログインできるようにしたいんですけど、どうやってやるんですか?」
先輩
「それならGoogle OAuth2を使えば簡単に実現できるよ。最近のアプリでは標準的なログイン方法になってるんだ。」
新人
「OAuth2って言葉は聞いたことあるんですけど、仕組みとか設定方法はまだよくわかっていなくて……。」
先輩
「それじゃ、まずはOAuth2の仕組みから説明して、それからSpring BootでのGoogleログイン導入手順を一緒に見ていこうか。」
1. Google OAuth2とは何か
OAuth2とは、ユーザーの認証情報(IDやパスワード)をアプリケーションに直接渡すことなく、第三者が安全にログインやデータアクセスを行うための仕組みです。現在多くのサービスで導入されており、特にGoogle OAuth2は信頼性が高く、多くのWebアプリで使われています。
例えば、あるSpring BootアプリケーションにGoogleアカウントでログインする場合、アプリ自体はユーザーのパスワードを扱いません。代わりにGoogleが認証を行い、アプリにはユーザー情報を含むトークンだけが返される仕組みです。
このようにGoogle OAuth2を使うことで、セキュリティを保ちつつ、ユーザーは手軽にGoogleログインができるようになります。
2. Spring BootでGoogleログインを実現する仕組みと流れ
Spring BootでGoogle OAuth2を導入するには、Spring SecurityとOAuth2 Client機能を活用します。ユーザーがログインボタンをクリックすると、以下のような流れでGoogleログインが実現します。
- ① ユーザーが
/oauth2/authorization/googleにアクセス - ② Spring Securityが自動でGoogleの認可画面にリダイレクト
- ③ ユーザーがGoogleアカウントでログイン
- ④ Googleがアクセストークンとユーザー情報をアプリに返す
- ⑤ Spring Bootアプリ内で認証済みの状態になり、指定ページに遷移
この一連の流れは、Spring SecurityのOAuth2クライアント設定によって自動的に行われます。必要なのは、正しい依存関係と設定ファイルの記述だけです。
また、Googleログインが成功した際にリダイレクトされるURLや、ログイン画面の指定などもSpring Boot側で細かく制御できます。
次のセクションでは、実際に開発を始める準備として、Pleiadesでのプロジェクト作成や依存関係の選択方法を解説します。
3. 開発準備(Pleiadesでのプロジェクト作成、依存関係の選択)
① 開発環境の前提
このガイドでは、Pleiades(日本語化Eclipse)を使用してSpring Bootアプリケーションを作成します。ビルドツールにはGradleを使用し、Mavenは使いません。
また、@Controllerを使ってコントローラを実装し、@RestControllerは使用しない構成です。
② PleiadesでSpring Bootプロジェクトを作成する
- 1. 「ファイル」→「新規」→「Springスターター・プロジェクト」を選択
- 2. プロジェクト名を入力(例:google-login-demo)
- 3. 使用するビルドツールに「Gradle」を選択
- 4. Javaのバージョンを選択(例:17)
③ 必要な依存関係をチェックで追加
依存関係の選択画面では、以下の項目にチェックを入れてください。
- Spring Web(@Controllerで画面制御)
- Spring Security(認証処理全体)
- OAuth2 Client(Googleログイン)
- Thymeleaf(ログイン画面の表示)
④ プロジェクトの作成と起動
依存関係の設定が完了したら、「完了」をクリックしてプロジェクトを作成します。その後、Pleiadesの「プロジェクトを右クリック → Spring Bootアプリケーションとして実行」を選択すれば、アプリが起動します。
コンソールに「Started Application」と表示されれば、Spring Bootの起動は成功です。次のステップでは、build.gradleの設定やapplication.ymlの内容を記述して、Google OAuth2の連携準備を進めていきます。
4. build.gradleファイルへの依存関係追加
Spring BootでGoogle OAuth2を利用するためには、必要な依存関係をbuild.gradleに追加する必要があります。前のセクションでPleiades上で依存関係をチェックして追加した場合でも、自動生成された内容を一度確認しておくことが大切です。
以下は、Googleログイン機能を含むSpring Bootアプリケーションに必要な主な依存関係です。
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
}
spring-boot-starter-oauth2-client は、Google認証のような外部OAuth2サービスとの連携に不可欠な依存関係です。これが含まれていないとSpring SecurityがGoogleログインの処理を実行できません。
spring-boot-starter-security は、アプリ全体のセキュリティ機能を提供するもので、アクセス制御や認証処理を担当します。
spring-boot-starter-web と spring-boot-starter-thymeleaf は、@Controllerで画面を制御するための基本構成として必要です。
5. application.ymlの設定(Googleのclient-id・secretを含む)
次に、Google OAuth2との連携に必要な情報をapplication.ymlに記述します。設定ファイルはsrc/main/resourcesディレクトリに配置されているはずです。
Google Cloud Consoleで取得したclient-idとclient-secretを使用して、以下のように設定します。
spring:
security:
oauth2:
client:
registration:
google:
client-id: YOUR_GOOGLE_CLIENT_ID
client-secret: YOUR_GOOGLE_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
ここで、registrationセクションはOAuth2クライアントの設定で、client-idやclient-secretの値を設定します。scopeでGoogleから取得する情報の種類を指定します。
providerセクションでは、認可やトークン発行、ユーザー情報取得のためのURLを明示的に指定します。これらはGoogleが公開している標準のエンドポイントをそのまま使用します。
このようにapplication.ymlにGoogleログイン設定を記述することで、Spring Bootが自動的にGoogle OAuth2との連携を行ってくれます。
application.yml Googleログインという観点では、設定内容の正確さと見通しの良さが特に重要です。スペルミスやインデントミスはエラーの原因になるため、コピー&ペースト後もしっかり確認しましょう。
6. セキュリティ設定(SecurityConfigクラスの記述)
Spring BootでGoogle OAuth2ログインを導入するには、セキュリティ設定をカスタマイズするSecurityConfigクラスを作成する必要があります。このクラスでは、アプリケーションのアクセス制御やログイン画面の設定を行います。
まずは、com.example.googlelogin.configパッケージなどに以下のようなJavaクラスを作成します。
package com.example.googlelogin.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.context.annotation.Bean;
import org.springframework.security.web.SecurityFilterChain;
@Configuration
public class SecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests(authz -> authz
.requestMatchers("/", "/login", "/css/**", "/js/**").permitAll()
.anyRequest().authenticated()
)
.oauth2Login(oauth2 -> oauth2
.loginPage("/login")
);
return http.build();
}
}
authorizeHttpRequestsでは、どのリクエストを認証不要にするかを定義します。"/"や"/login"などの公開ページはpermitAll()でアクセスを許可します。
それ以外のすべてのURL(anyRequest())にはauthenticated()を指定し、ログイン済みでないとアクセスできないようにします。
oauth2Loginでは、OAuth2によるログイン設定を行い、/loginページをログイン入口として指定します。これにより、未ログイン時に/oauth2/authorization/googleへ自動リダイレクトされる仕組みが整います。
このSecurityConfigクラスにより、Spring Boot Google OAuth2 設定が具体的に完了し、ログイン機能が機能的に動作するようになります。
次回はこの設定を活かして、@Controllerを使った画面表示や、ログイン後のリダイレクト処理、そして実際にアプリを起動してログイン動作を確認する手順を解説していきます。
7. ログイン画面とログイン後画面の表示方法(Thymeleaf + @Controller)
ここからは、実際にユーザーがアクセスするログイン画面とログイン後の画面を作成していきます。画面の表示にはThymeleafを使用し、コントローラは@Controllerアノテーションを使って制御します。
まずはログイン用のHTMLファイルをsrc/main/resources/templates/login.htmlとして作成します。
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>ログイン</title>
</head>
<body>
<h1>Googleアカウントでログイン</h1>
<a th:href="@{/oauth2/authorization/google}">Googleでログイン</a>
</body>
</html>
このHTMLは非常にシンプルで、GoogleのOAuth2認可エンドポイントにリンクするタグだけを含んでいます。これをクリックすることで、ユーザーはGoogleログイン画面へ遷移します。
次に、ログイン後に遷移するホーム画面home.htmlを作成します。
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>ホーム</title>
</head>
<body>
<h1>ようこそ!ログイン成功しました</h1>
<p th:text="'ログインユーザー:' + ${userName}"></p>
</body>
</html>
次に、これらの画面を表示するためのコントローラを作成します。
package com.example.googlelogin.controller;
import org.springframework.stereotype.Controller;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.security.oauth2.core.oidc.user.OidcUser;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class LoginController {
@GetMapping("/login")
public String login() {
return "login";
}
@GetMapping("/")
public String home(@AuthenticationPrincipal OidcUser user, Model model) {
model.addAttribute("userName", user.getFullName());
return "home";
}
}
@GetMapping("/login")ではログインページを表示し、@GetMapping("/")ではログイン成功後に表示するホーム画面を返しています。
@AuthenticationPrincipalを使ってGoogleから取得したユーザー情報を受け取り、Thymeleafで表示しています。これにより、Spring Boot Googleログイン 画面遷移の構成が整います。
8. 認証成功・失敗時のリダイレクト処理
次に、Googleログインの認証が成功したときや失敗したときのリダイレクト先を指定する方法を紹介します。これらの制御はSecurityConfigクラスに追記していきます。
.oauth2Login(oauth2 -> oauth2
.loginPage("/login")
.defaultSuccessUrl("/", true)
.failureUrl("/login?error=true")
)
defaultSuccessUrl("/", true)を指定することで、ログイン成功後に常に/(ホーム画面)にリダイレクトされるようになります。
failureUrl("/login?error=true")では、ログインに失敗した際に再度ログイン画面に戻し、パラメータでエラーを通知します。
ログイン画面側でこのパラメータを使ってエラー表示を行うには、login.htmlに以下のように記述します。
<div th:if="${param.error}">
<p style="color:red;">ログインに失敗しました。もう一度お試しください。</p>
</div>
この設定により、Spring Boot Googleログイン 画面遷移がよりユーザーにやさしいものになります。ログインの成否に応じて適切に遷移させることで、操作性が格段に向上します。
9. 実際にPleiadesでアプリを起動してGoogleログイン動作を確認する方法
最後に、ここまで作成したアプリケーションをPleiadesから起動して、Google OAuth2によるログイン動作を確認します。
① Spring Bootアプリケーションの起動
- 1. Pleiadesのパッケージエクスプローラーでプロジェクトを右クリック
- 2. 「実行」→「Spring Boot アプリケーション」を選択
- 3. コンソールに「Started Application」と表示されるまで待機
② ブラウザでログイン画面にアクセス
ブラウザで http://localhost:8080/login にアクセスすると、先ほど作成したログイン画面が表示されます。
「Googleでログイン」リンクをクリックすると、Googleのログイン画面へリダイレクトされます。
③ Googleログイン成功後の確認
Googleアカウントで認証が成功すると、アプリケーションは/にリダイレクトされます。ホーム画面が表示され、「ログインユーザー:●●さん」のようにユーザー名が表示されていれば成功です。
この確認作業を通して、Google OAuth2 Spring Boot 動作確認が正常に行われたことになります。
④ エラー時の確認
Googleログインに失敗した場合は、ログイン画面に戻され「ログインに失敗しました」と赤文字でエラーメッセージが表示されます。
このようにエラーを明示することで、ユーザーは安心して再ログインを試すことができます。
以上で、Spring Bootを使ったGoogle OAuth2によるログイン機能の実装と動作確認まで完了です。初心者でも丁寧に構築すれば、簡単に安全な認証機能を取り入れることができます。