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 実装を進めてください。