OAuth 2.1 Learning Workspace

認証のしくみを、透明にする。

OAuth 2.1とOpenID Connectを、動くコードから理解するための検証環境。PKCE、JWT署名検証、BFFセッションの全経路を追跡できます。

SPRING BOOTNEXT.JSPOSTGRESQLNGINX
authorization.flow● SECURE
GET/oauth2/authorize302

client_idauth-client

response_typecode

code_challenge_methodS256

scopeopenid profile

Signature verifiedRS256 · issuer matched · scope granted

役割を分離し、
信頼をつなぐ。

3つの独立サービスをNginxのHTTPSプロキシで束ねます。それぞれの責務と境界が、コードとログから明確に見える構成です。

IDENTITY

Authorization Server

Spring Boot · Spring Authorization Server

ログイン、同意、PKCE検証からJWT・IDトークンの発行まで、認可フローの中核を担います。

authorization-server.local.gekal.cn
PROTECTED API

Resource Server

Spring Boot · OAuth2 Resource Server

JWKSでJWT署名を検証し、必要なスコープを持つリクエストだけを安全に処理します。

resource-server.local.gekal.cn
EXPERIENCE

Client Application

Next.js App Router · BFF

PKCEとトークンをサーバー側セッションで管理し、ブラウザへ秘密情報を露出させません。

client-app.local.gekal.cn
ENTRYBrowser
HTTPS
PROXYNginx
BFF
SESSIONNext.js
PKCE
IDENTITYSpring Auth
JWT
RESOURCEProtected API

秘密をブラウザに
渡さない設計。

BFFがOAuthトランザクションとトークンを管理し、ブラウザには安全なセッションCookieだけを渡します。

  1. 01
    Challenge

    PKCEを生成

    BFFがcode_verifierを保存し、SHA-256からcode_challengeを生成します。

  2. 02
    Authorize

    ログインと同意

    Authorization Serverで本人確認を行い、profileスコープへの同意を取得します。

  3. 03
    Exchange

    コードを交換

    認可コードとcode_verifierを照合し、アクセストークンとIDトークンを発行します。

  4. 04
    Validate

    JWTを検証

    Resource Serverが署名、issuer、期限、スコープを検証してAPI応答を返します。

数分で、認証フローを
動かしてみる。

Docker Composeがアプリケーション、データベース、HTTPSプロキシをまとめて起動します。

~/auth-services-workspaceZSH
# リポジトリを取得
git clone git@github.com:gekal-study-auth/auth-services-workspace.git
cd auth-services-workspace

# すべてのサービスを起動
docker compose up -d --build

# ブラウザでクライアントを開く
open https://client-app.local.gekal.cn/
01

検証ユーザー

user / password

02

同意画面

profileを選択して認可します。

03

APIログ

docker compose logs -fで通信を追跡できます。

学習・ローカル検証専用です。

ComposeではAPI本文ログが有効なため、パスワードやトークンも平文で記録されます。本番環境では本文ログを無効化し、秘密情報を外部のSecret管理へ移してください。