GitHub OAuth2の設定方法を完全ガイド!Spring Bootでの導入手順を初心者向けに解説
新人
「先輩、Spring BootでGitHubアカウントを使ってログインするにはどうすればいいんですか?」
先輩
「GitHub OAuth2を使えば、簡単に実装できるよ。今は多くのアプリがSNS認証を取り入れているから、GitHubログインも実践的な機能だね。」
新人
「OAuth2は聞いたことあるんですが、どうやってSpring Bootに組み込むのかがまだよくわかりません……。」
先輩
「それじゃあ、GitHub OAuth2の仕組みから順に解説していこう!」
1. GitHub OAuth2とは?
GitHub OAuth2とは、ユーザーがGitHubアカウントを使って外部のWebアプリケーションに安全にログインできるようにする認証方式です。
アプリケーションがユーザーのIDやパスワードを直接扱わず、代わりにGitHubが発行するアクセストークンを利用して認証処理を行うのが特徴です。
Spring BootでGitHubログインを実装する際も、このOAuth2の仕組みを使うことで、セキュリティの高いログイン機能を実現できます。
ユーザーが/oauth2/authorization/githubにアクセスすると、Spring Securityが自動的にGitHubの認証ページへリダイレクトし、ログイン後にアプリに戻ってきます。
この一連の流れを理解しておくことで、Spring BootにおけるGitHub OAuth2設定がスムーズになります。
2. Spring BootでGitHubログインを実現する流れ
Spring Boot GitHub OAuth2 設定では、以下のような手順で実装を進めます。
- ① GitHubでOAuthアプリケーションを作成し、
client-idとclient-secretを取得 - ② Spring Bootのプロジェクトに必要な依存関係を追加
- ③
application.ymlでGitHubとの接続情報を設定 - ④ セキュリティ設定クラスを作成
- ⑤ ログインページとログイン後のページを作成
- ⑥ 実際にログイン動作を確認
このように、GitHubログイン Spring Boot 実装の流れは明確です。順を追って設定すれば、初心者でも十分に構築可能です。
3. PleiadesでのSpring Bootプロジェクト作成(Gradle構成)
まずは、Pleiades(日本語化Eclipse)でプロジェクトを作成しましょう。今回はGradleを使って構成します。
Pleiadesを起動したら、以下の手順で進めます。
- 1. 「ファイル」→「新規」→「Spring スターター・プロジェクト」を選択
- 2. プロジェクト名を入力(例:github-login-demo)
- 3. ビルドツールに「Gradle」を選択
- 4. Javaバージョンは17を選択(またはプロジェクトの要件に合わせる)
次に、必要な依存関係をチェックします。GitHub OAuth2によるログイン機能を作るためには、以下の依存関係を選んでください。
- Spring Web(@Controllerで画面を表示するため)
- Spring Security(セキュリティ認証)
- OAuth2 Client(GitHubログイン処理)
- Thymeleaf(ログイン画面のテンプレート)
依存関係の設定が終わったら、「完了」ボタンを押してプロジェクトを生成します。プロジェクトが作成されたら、起動して初期状態のSpring Bootアプリケーションを確認しておきましょう。
これで、GitHubログイン Spring Boot プロジェクト構築の第一段階が完了です。次回は、実際にGradle設定やYAMLファイルへのGitHub接続情報の記述を行い、ログイン処理の実装を進めていきます。
4. build.gradleファイルへの依存関係追加
Spring BootでGitHub OAuth2を利用するためには、必要な依存関係をbuild.gradleに追加する必要があります。Pleiadesのプロジェクト作成時に依存関係を追加している場合でも、内容を確認しておくことが重要です。
以下は、GitHub OAuth2ログインに必要な主要な依存関係の例です。
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はGitHubなどのOAuth2プロバイダーと連携するために不可欠な依存関係です。これがないとSpring SecurityはGitHubの認証を処理できません。
spring-boot-starter-securityは、アプリ全体のセキュリティ機能を提供し、認証と認可の処理を担当します。
spring-boot-starter-webとspring-boot-starter-thymeleafは、Webアプリケーションの画面表示とルーティングに必要です。
依存関係を追加後は、PleiadesのGradleタスクから「依存関係のリフレッシュ」を実行して反映してください。
5. application.ymlの設定(GitHubのclient-id・client-secretを含む)
GitHub OAuth2の連携に必要な設定はapplication.ymlに記述します。このファイルはsrc/main/resourcesディレクトリにあります。
GitHubのDeveloper SettingsでOAuthアプリケーションを登録し、client-idとclient-secretを取得してください。
取得した情報を使って、以下のようにapplication.ymlを設定します。
spring:
security:
oauth2:
client:
registration:
github:
client-id: YOUR_GITHUB_CLIENT_ID
client-secret: YOUR_GITHUB_CLIENT_SECRET
scope:
- read:user
- user:email
provider:
github:
authorization-uri: https://github.com/login/oauth/authorize
token-uri: https://github.com/login/oauth/access_token
user-info-uri: https://api.github.com/user
user-name-attribute: login
registration.githubセクションにはGitHubの認証情報とアクセス権限(scope)を設定します。
provider.githubではGitHubのOAuth2エンドポイントURLを指定し、ユーザー名の属性名をloginに設定しています。
この設定により、Spring BootはGitHubのOAuth2認証フローを理解し、ユーザー情報を正しく取得できるようになります。
6. セキュリティ設定(SecurityConfigクラスの作成と解説)
次に、Spring Securityの設定をカスタマイズするためにSecurityConfigクラスを作成します。ここでURLのアクセス制御やログイン画面の指定を行います。
下記は、@Controllerを使う前提の基本的なセキュリティ設定例です。
package com.example.githublogin.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Bean;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
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")
.defaultSuccessUrl("/", true)
.failureUrl("/login?error=true")
);
return http.build();
}
}
authorizeHttpRequestsで、トップページやログインページなどは誰でもアクセスできるようにし、それ以外は認証済みユーザーのみアクセス可能に設定しています。
oauth2Loginでは、カスタムログインページのパスを/loginに設定し、認証成功後は常にトップページ(/)にリダイレクトされるようにしています。
失敗時は/login?error=trueにリダイレクトし、ログイン画面でエラーメッセージを表示できます。
これでGitHub OAuth2 Spring Bootに必要なセキュリティ設定は完了です。次回はログイン画面やホーム画面の作成、実際の動作確認について解説します。
7. ログイン画面とログイン後画面の表示方法(Thymeleaf + @Controller)
GitHub OAuth2でのログイン機能を実装した後は、ユーザーが操作するログイン画面やログイン後のホーム画面を用意する必要があります。ここでは、Thymeleafを使ったテンプレートと、@Controllerを利用したコントローラの実装例を紹介します。
まずはログイン画面です。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>GitHubログイン</h1>
<div th:if="${param.error}">
<p style="color:red;">ログインに失敗しました。もう一度お試しください。</p>
</div>
<a href="/oauth2/authorization/github">GitHubでログイン</a>
</body>
</html>
ログイン画面にはGitHubログインのリンクだけを設置しています。/oauth2/authorization/githubのURLがSpring Securityの認証開始ポイントです。
次に、ログイン成功後に表示するトップページ(ホーム画面)を用意します。src/main/resources/templates/index.htmlに以下のように記述します。
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8" />
<title>ホームページ</title>
</head>
<body>
<h1>ようこそ、<span th:text="${userName}">ユーザー</span>さん!</h1>
<p><a href="/logout">ログアウト</a></p>
</body>
</html>
このページでは、ログインユーザーのGitHubのユーザー名を表示しています。userNameはコントローラでモデルに設定します。
次に、コントローラの実装例を示します。src/main/java/com/example/githublogin/controller/LoginController.javaに以下のコードを作成してください。
package com.example.githublogin.controller;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.security.oauth2.core.user.OAuth2User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class LoginController {
@GetMapping("/")
public String index(@AuthenticationPrincipal OAuth2User principal, Model model) {
if (principal != null) {
model.addAttribute("userName", principal.getAttribute("login"));
} else {
model.addAttribute("userName", "ゲスト");
}
return "index";
}
@GetMapping("/login")
public String login() {
return "login";
}
}
このコントローラでは、トップページで認証済みのユーザー情報を取得し、GitHubのユーザー名を表示しています。ログイン画面はシンプルにlogin.htmlを返すだけです。
これでSpring Boot GitHubログイン 画面遷移の基本的な流れが完成します。
8. 認証成功・失敗時のリダイレクト処理
Spring SecurityのSecurityConfigで設定したリダイレクトURLにより、認証成功時と失敗時の動作が制御されています。ここで再度詳しく説明します。
認証成功時には以下の設定により、常にトップページにリダイレクトされます。
.oauth2Login(oauth2 -> oauth2
.loginPage("/login")
.defaultSuccessUrl("/", true)
.failureUrl("/login?error=true")
);
defaultSuccessUrl("/", true)は、認証成功後に必ずトップページにリダイレクトする設定です。これによりログイン後は自動的にホーム画面に遷移します。
failureUrl("/login?error=true")は認証失敗時のリダイレクト先です。ログイン画面に戻り、エラーメッセージを表示できます。
実際の画面では、先ほどのlogin.htmlのth:if="${param.error}"が有効になり、エラーをユーザーに知らせます。
こうしたリダイレクトの仕組みは、GitHub OAuth2 Spring Boot 実装においてユーザー体験を向上させる重要なポイントです。
9. 実際にPleiadesでアプリを起動してGitHubログイン動作を確認する方法
最後に、Pleiades環境で作成したSpring Bootアプリケーションを起動し、GitHubログインが正常に動作するか確認する方法を紹介します。
まず、Pleiadesのプロジェクトエクスプローラーで作成したプロジェクトを右クリックし、「Spring Bootアプリケーションとして実行」を選択します。
コンソールに「Started Application」と表示されれば起動成功です。
ブラウザでhttp://localhost:8080/loginにアクセスしてください。GitHubログインのリンクが表示されているはずです。
リンクをクリックするとGitHubの認証画面にリダイレクトされます。GitHubのアカウント情報を入力し、認証を許可してください。
認証に成功すると、自動的にトップページにリダイレクトされ、GitHubのユーザー名が表示されます。
もしログインに失敗した場合は、ログイン画面に戻り、赤いエラーメッセージが表示されます。エラーが出る場合は、application.ymlの設定やGitHubのクライアントID・シークレットを再確認してください。
これで、Spring Boot GitHubログイン 動作確認は完了です。ユーザーが安全にGitHubアカウントで認証できるWebアプリケーションの完成です。
以上の手順を参考に、GitHub OAuth2 Spring Boot 実装を進めてください。
まとめ
GitHub OAuth2とSpring Boot連携の全体像を振り返る
ここまで、Spring Bootを使ってGitHub OAuth2ログイン機能を実装する流れを、基礎から丁寧に確認してきました。 GitHub OAuth2は、ユーザーのIDやパスワードをアプリケーション側で直接扱わず、GitHubが提供する安全な認証基盤を利用できる仕組みです。 この仕組みをSpring SecurityとOAuth2 Clientに任せることで、実装者は複雑な認証ロジックを書かずに、実用的なGitHubログイン機能を構築できます。
特に初心者がつまずきやすいのは、「どこで何を設定しているのか分からなくなる」点です。 しかし、今回のようにGitHub側のOAuthアプリ設定、Spring Bootプロジェクト作成、Gradle依存関係、application.yml、SecurityConfig、画面とコントローラという順番で整理すると、 GitHubログインの仕組みが一本の流れとして理解できるようになります。
設定ファイルとコードの役割を整理する
build.gradleでは、Spring Boot GitHub OAuth2ログインに必要な部品を読み込んでいます。 application.ymlでは、GitHubのclient-idとclient-secret、そして認証やユーザー情報取得に使うエンドポイントを設定しました。 これらはアプリケーションがGitHubと通信するための「設計図」のような役割を果たしています。
SecurityConfigクラスでは、どのURLに誰がアクセスできるのか、どのログイン方式を使うのかを定義しました。 oauth2Loginの設定によって、GitHubログインが有効になり、成功時や失敗時の画面遷移も制御できています。 この設定があるからこそ、Spring Boot GitHub OAuth2認証が自然な操作感で動作します。
画面とコントローラでユーザー体験を完成させる
ログイン画面とログイン後画面を用意することで、GitHub OAuth2認証は単なる仕組みから「使える機能」へと変わります。 Thymeleafを使ったテンプレートでは、GitHubログインリンクやエラーメッセージを分かりやすく表示できました。 @Controllerでは、OAuth2UserからGitHubのユーザー名を取得し、画面に反映することで、ログイン成功を実感できる構成になっています。
この一連の流れは、GitHubログインに限らず、Googleログインや他のSNS認証を実装する際にも応用できます。 Spring Boot OAuth2の基本構造を理解しておくことで、認証機能を備えたWebアプリケーション開発の幅が大きく広がります。
まとめとしてのサンプル設定イメージ
最後に、今回学んだ内容をイメージとして整理するため、シンプルな設定例をもう一度確認しておきましょう。 実際のプロジェクトでも、同じクラス構成やタグ構成で実装できます。
@Configuration
public class SecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests(auth -> auth
.requestMatchers("/login").permitAll()
.anyRequest().authenticated()
)
.oauth2Login(oauth2 -> oauth2
.loginPage("/login")
.defaultSuccessUrl("/", true)
);
return http.build();
}
}
生徒
「最初はGitHub OAuth2って難しそうだと思っていましたけど、順番に見ていくと意外と整理されているんですね。」
先生
「そうだね。Spring BootとSpring Securityが、OAuth2の複雑な部分をほとんど肩代わりしてくれているんだよ。」
生徒
「application.ymlとSecurityConfigの役割が分かってから、全体の流れがつながった気がします。」
先生
「それは大事なポイントだね。GitHubログインの設定は、どこか一つだけ理解しても動かない。 設定、セキュリティ、画面、この三つがそろって初めて完成するんだ。」
生徒
「今回の内容が分かれば、Spring BootでのOAuth2ログイン実装は自信を持って進められそうです。」
先生
「その調子だよ。GitHub OAuth2は実務でもよく使うから、今回の経験はきっと役に立つはずだね。」