カテゴリ: Spring認証(Spring Security) 更新日: 2026/01/05

OpenID Connectを利用した認証の設定を初心者向けに徹底解説!Spring Securityでの実装手順

OpenID Connectを利用した認証の設定
OpenID Connectを利用した認証の設定

新人と先輩の会話形式で理解しよう

新人

「先輩、OpenID Connectってよく聞きますけど、OAuth2と何が違うんですか?」

先輩

「OpenID ConnectはOAuth2をベースにした認証の仕組みだよ。OAuth2は認可がメインだけど、OpenID Connectはそこにユーザー認証機能を追加して、ログイン処理もできるようになっているんだ。」

新人

「じゃあOAuth2でできないことができるってことですか?」

先輩

「そうだね。OAuth2だけだと、誰がアクセスしているかという本人確認はできないけど、OpenID ConnectならIDトークンを使ってユーザー情報を安全に取得できるんだ。」

新人

「IDトークンって何ですか?」

先輩

「IDトークンはユーザーの識別情報を含んだ特別なトークンで、OpenID Connectの認証結果として返されるJSON Web Token(JWT)のことだよ。それをアプリケーションで検証してユーザーのログイン状態を判定するんだ。」

1. OpenID Connectとは?(基本的な説明とOAuth2との関係)

1. OpenID Connectとは?(基本的な説明とOAuth2との関係)
1. OpenID Connectとは?(基本的な説明とOAuth2との関係)

OpenID Connect(オープンアイディーコネクト)は、OAuth2.0のプロトコルを拡張して認証機能を追加した仕組みです。OAuth2.0はリソースへのアクセス権限を安全に委譲する「認可」に特化しているのに対し、OpenID Connectはログイン機能を提供し、ユーザーの本人確認を行います。

OpenID Connectの認証では、認可サーバーが発行するIDトークンが重要な役割を果たします。このトークンにはユーザーの識別情報(例:ユーザーID、メールアドレス、氏名など)が含まれており、アプリケーション側で検証することで、確実に本人であることを確認できます。

Spring Securityは、このOpenID Connectの認証フローを簡単に実装できる仕組みを提供しており、Pleiades環境でGradleを使って構築すれば、複雑な設定もシンプルに行えます。依存関係はPleiadesのチェック機能を利用してspring-boot-starter-oauth2-clientを追加することで対応可能です。

例えば、Spring SecurityでOpenID Connectを利用する設定は以下のように行います。


@Configuration
@EnableWebSecurity
public class SecurityConfig {

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http
            .authorizeHttpRequests(auth -> auth
                .anyRequest().authenticated()
            )
            .oauth2Login();
        return http.build();
    }
}

この設定により、Spring Securityが自動的にOpenID Connectの認証エンドポイントにリダイレクトし、ログイン処理を行います。

2. OpenID Connectを使った認証の流れ(IDトークンやユーザー情報の取得)

2. OpenID Connectを使った認証の流れ(IDトークンやユーザー情報の取得)
2. OpenID Connectを使った認証の流れ(IDトークンやユーザー情報の取得)

OpenID Connectの認証フローは以下の手順で進みます。

  1. ユーザーがアプリケーションにアクセスする。
  2. Spring Securityが未認証ユーザーをOpenID Provider(OP)のログインページにリダイレクトする。
  3. ユーザーが認証情報(IDやパスワード)を入力してログインする。
  4. OPが認可コードをアプリケーションに返す。
  5. アプリケーションが認可コードを使ってアクセストークンとIDトークンを取得する。
  6. IDトークンを検証し、ユーザー情報を取得して認証を完了する。

IDトークンはJWT形式で署名されており、改ざんされていないことを検証できます。Spring Securityでは、OAuth2AuthenticationTokenを使ってログイン後のユーザー情報を簡単に取得できます。

例えば、認証後にユーザー情報を表示する@Controllerは以下のように実装できます。


@Controller
public class UserController {

    @GetMapping("/userinfo")
    public String userInfo(Model model, OAuth2AuthenticationToken authentication) {
        Map<String, Object> attributes = authentication.getPrincipal().getAttributes();
        model.addAttribute("attributes", attributes);
        return "userinfo";
    }
}

そして、ユーザー情報を表示するビューは以下のように記述できます。


<!DOCTYPE html>
<html>
<body>
    <h3>ユーザー情報</h3>
    <ul>
        <th:block th:each="entry : ${attributes}">
            <li>[[${entry.key}]] : [[${entry.value}]]</li>
        </th:block>
    </ul>
</body>
</html>

このように、OpenID Connectを利用すると、OAuth2の認可機能に加えてユーザーの認証も行えるため、ログイン機能を安全に実装できます。初心者の方もSpring Securityのサポートを活用すれば、設定や実装が容易になります。

3. Spring SecurityでOpenID Connectを有効化する方法

3. Spring SecurityでOpenID Connectを有効化する方法
3. Spring SecurityでOpenID Connectを有効化する方法

Spring SecurityでOpenID Connectを有効化するためには、プロジェクトに必要な依存関係を追加し、HttpSecurityの設定を行うことが基本です。Pleiades環境でGradleを利用する場合、依存関係はPleiadesのチェック機能を使用して追加できます。主に必要なのはspring-boot-starter-securityspring-boot-starter-oauth2-clientです。

OpenID Connectの認証を利用するには、application.yml(またはapplication.properties)にクライアントIDやクライアントシークレット、認可サーバーのエンドポイント情報を設定し、Javaコードでoauth2Login()を有効化します。以下は設定のサンプルです。


@Configuration
@EnableWebSecurity
public class SecurityConfig {

    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
            .authorizeHttpRequests(auth -> auth
                .anyRequest().authenticated()
            )
            .oauth2Login(oauth2 -> oauth2
                .loginPage("/login")
            );
        return http.build();
    }
}

この設定により、Spring Securityは未認証ユーザーを自動的にOpenID Providerのログインページへリダイレクトし、認証後はアプリケーションに戻します。ログインページをカスタマイズする場合は、@Controller/loginをハンドリングします。

4. 認証後に取得できるユーザー情報の扱い方

4. 認証後に取得できるユーザー情報の扱い方
4. 認証後に取得できるユーザー情報の扱い方

OpenID Connectの認証後には、ユーザーの属性情報(Claims)が取得できます。これらの情報には、ユーザー名、メールアドレス、プロフィール情報などが含まれ、アプリケーションの各機能で活用できます。

Spring Securityでは、OAuth2AuthenticationTokenを利用して認証済みユーザーの詳細情報を簡単に取得可能です。以下の例では、モデルに属性を追加し、ビューに渡しています。


@Controller
public class AccountController {

    @GetMapping("/account")
    public String accountInfo(Model model, OAuth2AuthenticationToken authentication) {
        Map<String, Object> attributes = authentication.getPrincipal().getAttributes();
        model.addAttribute("attributes", attributes);
        return "account";
    }
}

このようにしてモデルにセットした情報は、Thymeleafなどのテンプレートエンジンを使って簡単に表示できます。


<!DOCTYPE html>
<html>
<body>
    <h3>アカウント情報</h3>
    <ul>
        <th:block th:each="entry : ${attributes}">
            <li>[[${entry.key}]] : [[${entry.value}]]</li>
        </th:block>
    </ul>
</body>
</html>

この方法を使えば、認証後に取得したユーザー情報を画面表示や業務ロジックで利用できます。

5. 実際の@Controllerを使ったログイン処理の実装例

5. 実際の@Controllerを使ったログイン処理の実装例
5. 実際の@Controllerを使ったログイン処理の実装例

次に、@Controllerを使ってOpenID Connect認証後の処理を行う例を紹介します。ここでは、ログイン後にユーザーの表示名をホーム画面に表示し、必要に応じて条件分岐で表示内容を変更します。


@Controller
public class HomeController {

    @GetMapping("/")
    public String home(Model model, OAuth2AuthenticationToken authentication) {
        Map<String, Object> attributes = authentication.getPrincipal().getAttributes();
        String name = (String) attributes.getOrDefault("name", "ゲスト");
        model.addAttribute("username", name);
        return "home";
    }
}

ビューでは、取得したユーザー名を利用して挨拶を表示します。


<!DOCTYPE html>
<html>
<body>
    <h2>ようこそ [[${username}]] さん!</h2>
    <p>このページはOpenID Connect認証を利用して保護されています。</p>
</body>
</html>

このように@Controllerを利用することで、OpenID Connectの認証とアプリケーションの表示処理を簡潔に統合できます。特にSpring Securityと組み合わせることで、複雑なセッション管理やトークン検証のコードを書く必要がなくなり、初心者でも安全なログイン機能を実装できます。

6. OpenID Connectのクレーム(Claims)の活用方法

6. OpenID Connectのクレーム(Claims)の活用方法
6. OpenID Connectのクレーム(Claims)の活用方法

OpenID Connectのクレーム(Claims)とは、IDトークンやユーザー情報エンドポイントから取得できる属性データのことです。これには、ユーザーの識別子(sub)、氏名(name)、メールアドレス(email)、プロフィール情報(profile)などが含まれます。これらの情報は、アプリケーションの認証後の処理や表示内容の制御に役立ちます。

Spring Securityを使えば、OAuth2AuthenticationTokenOidcUserを通じて簡単にクレームを取得できます。以下は、認証後にクレームを一覧表示する例です。


@Controller
public class ClaimsController {

    @GetMapping("/claims")
    public String claims(Model model, OAuth2AuthenticationToken authentication) {
        Map<String, Object> claims = authentication.getPrincipal().getAttributes();
        model.addAttribute("claims", claims);
        return "claims";
    }
}

ビュー側でクレームを表示するには、以下のようにThymeleafを使います。


<!DOCTYPE html>
<html>
<body>
    <h3>取得したクレーム一覧</h3>
    <ul>
        <th:block th:each="entry : ${claims}">
            <li>[[${entry.key}]] : [[${entry.value}]]</li>
        </th:block>
    </ul>
</body>
</html>

クレームを活用することで、ユーザーごとに表示する情報を切り替えたり、業務処理を条件分岐したりできます。例えば、特定の組織に所属するユーザーだけが利用できる機能をクレームの値で判定することも可能です。

7. 権限やアクセス制御とOpenID Connectの組み合わせ

7. 権限やアクセス制御とOpenID Connectの組み合わせ
7. 権限やアクセス制御とOpenID Connectの組み合わせ

OpenID ConnectとSpring Securityを組み合わせることで、ユーザーの属性情報だけでなく、権限(Authorities)を使った柔軟なアクセス制御が可能になります。権限は通常、ロール(ROLE_USER、ROLE_ADMINなど)として設定されますが、OpenID Connectのスコープやクレームの値を元に付与することもできます。

例えば、クレームに「admin=true」という情報が含まれている場合、それを元に管理者ロールを割り当てる実装が可能です。Spring SecurityのSecurityFilterChain設定では以下のように記述できます。


@Configuration
@EnableWebSecurity
public class RoleSecurityConfig {

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http
            .authorizeHttpRequests(auth -> auth
                .requestMatchers("/admin/**").hasRole("ADMIN")
                .requestMatchers("/user/**").hasRole("USER")
                .anyRequest().authenticated()
            )
            .oauth2Login();
        return http.build();
    }
}

これにより、管理者権限を持つユーザーは/admin/**配下のURLにアクセスでき、一般ユーザーは/user/**配下のURLにアクセスできるようになります。

さらに、アクセス制御はコントローラレベルでも実施できます。例えば、@PreAuthorizeアノテーションを使えば、メソッド単位で権限制御が可能です。


@Controller
public class AdminController {

    @PreAuthorize("hasRole('ADMIN')")
    @GetMapping("/admin/dashboard")
    public String adminDashboard() {
        return "adminDashboard";
    }
}

このように、OpenID Connectで取得した情報をもとに権限を割り当て、Spring Securityの機能と組み合わせることで、柔軟かつ安全なアクセス制御が実現できます。

8. 実際のアプリケーションでの活用例と運用上の注意点

8. 実際のアプリケーションでの活用例と運用上の注意点
8. 実際のアプリケーションでの活用例と運用上の注意点

OpenID Connectは、企業内ポータルサイト、会員制Webサービス、社内業務システムなど、幅広いアプリケーションで活用できます。例えば、GoogleやMicrosoftのアカウントでログインする社内ツールを構築すれば、パスワード管理の負担を軽減し、セキュリティを高められます。

実運用においては、以下のポイントに注意が必要です。

  • 必要最小限のスコープだけを要求する — 過剰な情報取得はセキュリティリスクやプライバシー侵害の原因になります。
  • IDトークンの署名検証を行う — 改ざんや不正発行を防ぐために必ず署名検証を行います。
  • アクセストークンの有効期限管理 — 長期間有効なトークンはリスクになるため、適切な期限を設定します。
  • 定期的な権限レビュー — 不要になった権限は速やかに削除し、アクセス制御を最新状態に保ちます。

以下は、Googleアカウントを利用したOpenID Connect認証設定例です(application.yml形式)。


spring:
  security:
    oauth2:
      client:
        registration:
          google:
            client-id: your-client-id
            client-secret: your-client-secret
            scope: openid,profile,email
            redirect-uri: "{baseUrl}/login/oauth2/code/{registrationId}"

この設定を行い、Spring Securityのoauth2Login()を有効化することで、Googleアカウントによる認証が可能になります。

OpenID Connectは、正しく設定・運用すれば、安全で利便性の高い認証を提供できます。特にSpring Securityとの連携により、Javaアプリケーションにシームレスに統合でき、初心者でも実装のハードルが低い点が大きな魅力です。

まとめ

まとめ
まとめ

OpenID ConnectとSpring Securityで実現する安全な認証の全体像

この記事では、OpenID Connectを利用した認証の仕組みについて、 Spring Securityを使った実装例を交えながら、初心者の方にも分かりやすく解説してきました。 OpenID Connectは、OAuth2をベースにしながらも、 ユーザー認証という重要な役割を担う仕組みであり、 現代のWebアプリケーションにおいて欠かせない存在です。

従来のIDとパスワードをアプリケーションごとに管理する方式では、 セキュリティリスクや運用コストが大きくなりがちでした。 OpenID Connectを導入することで、 認証処理を信頼できる認証基盤に任せ、 アプリケーション側はユーザー情報の活用に集中できるようになります。

Spring Securityは、このOpenID Connectの認証フローを 非常に自然な形で統合できるフレームワークです。 pleiades環境とGradleを使った構成であれば、 依存関係の追加や設定もシンプルに行え、 初心者の方でも無理なく実装を進められます。

IDトークンとクレーム理解が実装のカギになる

OpenID Connectを正しく理解するうえで重要なのが、 IDトークンとクレームの役割です。 IDトークンは、単なる文字列ではなく、 ユーザーの認証結果を安全に表現した情報のかたまりです。

Spring Securityでは、 これらのクレーム情報をOAuth2AuthenticationTokenOidcUserを通じて簡単に取得できます。 取得した情報を画面表示や業務ロジックに活用することで、 ログイン後のユーザー体験を自然に構築できます。


@Controller
public class SummarySampleController {

    @GetMapping("/summary")
    public String summary(Model model, OAuth2AuthenticationToken authentication) {
        String name = (String) authentication.getPrincipal()
                .getAttributes()
                .getOrDefault("name", "ユーザー");
        model.addAttribute("username", name);
        return "summary";
    }
}

このように、認証結果をそのままアプリケーションに反映できる点は、 Spring SecurityとOpenID Connectを組み合わせる大きなメリットです。 認証処理を意識しすぎることなく、 アプリケーション本来の機能開発に集中できます。

アクセス制御と実運用を見据えた設計の重要性

実際のWebアプリケーションでは、 認証だけでなくアクセス制御も重要になります。 OpenID Connectで取得したユーザー情報をもとに、 Spring Securityの権限制御を組み合わせることで、 安全かつ柔軟なシステム設計が可能になります。

また、スコープ設定やトークン管理、 権限の見直しといった運用面も意識することで、 長期的に安定した認証基盤を維持できます。 これらは難しい設定に見えますが、 基本的な考え方を押さえれば、少しずつ理解できるようになります。

先生と生徒の振り返り会話

生徒

「OpenID Connectって難しそうだと思っていましたけど、 Spring Securityを使えば意外と自然に実装できるんですね」

先生

「そうですね。認証の流れ自体は複雑でも、 Spring Securityが多くの部分を肩代わりしてくれます」

生徒

「IDトークンやクレームを使って、 画面表示や権限管理ができるのも便利だと感じました」

先生

「その気づきは大切ですね。 OpenID Connectはログイン処理だけでなく、 アプリケーション全体の設計にも関わってきます」

生徒

「まずは基本を押さえて、 少しずつ実際のアプリで使ってみたいと思います」

先生

「それが一番の近道です。 OpenID ConnectとSpring Securityは、 これからのWeb開発でも長く役立つ知識になりますよ」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

OpenID ConnectとOAuth2の違いは何ですか?Spring Securityでの使い分けが知りたいです。

OpenID ConnectはOAuth2を拡張した認証プロトコルで、OAuth2がリソースへのアクセス許可(認可)を担当するのに対して、OpenID Connectはユーザーの本人確認(認証)まで行います。Spring Securityでは、ログイン機能を実装する場合にはOpenID Connectを、外部サービスへのアクセス制御にはOAuth2を利用するとよいでしょう。
コメント
コメント投稿は、ログインしてください

まだ口コミはありません。

カテゴリの一覧へ
新着記事
New1
Spring認証(Spring Security)
Spring BootでCORSを設定する方法を完全解説!初心者でもわかるセキュリティ対策
New2
Spring認証(Spring Security)
パスワードをハッシュ化する理由とは?セキュリティ対策の基本をSpring Securityで学ぼう
New3
SpringのWeb開発(Spring MVC)
HTTPリクエストとレスポンスの基本を完全解説!Spring MVC初心者がWeb通信の仕組みをやさしく理解
New4
Spring認証(Spring Security)
ブラウザからのフォーム送信とは?HTTPリクエストの基礎を初心者向けに解説!
人気記事
No.1
Java&Spring記事人気No1
SpringのWeb開発(Spring MVC)
ルーティングとは?基本概念(Spring MVCのURL制御を理解)
No.2
Java&Spring記事人気No2
Thymeleaf
Thymeleaf とは?初心者向けにThymeleafの基本を徹底解説
No.3
Java&Spring記事人気No3
Springの基本
application.properties と YAML の基本をやさしく解説!初心者向けSpring Boot設定ファイル入門
No.4
Java&Spring記事人気No4
Springの基本
Spring Bootのデフォルトログ設定を徹底解説(Logback / SLF4J)
No.5
Java&Spring記事人気No5
Springの基本
Spring Bootの環境変数の設定方法をやさしく解説!初心者向けapplication.propertiesの使い方
No.6
Java&Spring記事人気No6
SpringのWeb開発(Spring MVC)
ループ処理(th:each)の基本を完全ガイド!Thymeafの繰り返し処理の使い方
No.7
Java&Spring記事人気No7
SpringのDB操作
JPAの標準クエリメソッド(findById, findAll)を完全解説!初心者でもわかるデータ取得の基本
No.8
Java&Spring記事人気No8
Spring認証(Spring Security)
セッション管理の基本(@SessionAttributes)を完全解説!初心者でもわかるセッションの仕組み