Closed6
100日チャレンジ day59(OIDC Provider)

昨日
100日チャレンジに感化されたので、アレンジして自分でもやってみます。
やりたいこと
- 世の中のさまざまなドメインの簡易実装をつくり、バックエンドの実装に慣れる(dbスキーマ設計や、関数の分割、使いやすいインターフェイスの切り方に慣れる
- 設計力(これはシステムのオーバービューを先に自分で作ってaiに依頼できるようにする
- 生成aiをつかったバイブコーティングになれる
- 実際にやったことはzennのスクラップにまとめ、成果はzennのブログにまとめる(アプリ自体の公開は必須ではないかコードはgithubにおく)
できたもの

OIDC Provider を作る

了解しました!Go言語でOAuth2/OpenID Connect Provider APIを実装しましょう。
🔐 Day59 - OAuth2/OpenID Connect Provider (Go API)
実装方針
- Go言語でOIDC Provider APIサーバーを構築
- RESTful APIでOAuth2/OpenID Connectエンドポイントを提供
- SQLiteでクライアント・ユーザー・トークン管理
- JWTによる署名・検証(RS256)
- Web UIは最小限のテスト・管理画面のみ
主要API エンドポイント
OAuth2/OpenID Connect標準エンドポイント
GET /.well-known/openid_configuration # Discovery
GET /.well-known/jwks.json # JSON Web Key Set
GET /authorize # Authorization endpoint
POST /token # Token endpoint
GET /userinfo # UserInfo endpoint
管理API
POST /api/clients # OAuth2クライアント作成
GET /api/clients # クライアント一覧
PUT /api/clients/{id} # クライアント更新
DELETE /api/clients/{id} # クライアント削除
POST /api/users # ユーザー作成
GET /api/users # ユーザー一覧
POST /api/users/login # ユーザーログイン
GET /api/tokens # 発行済みトークン一覧
DELETE /api/tokens/{id} # トークン失効
テスト用API
GET /test/client # OIDCクライアントシミュレーター
POST /test/validate-token # トークン検証
対応するOAuth2フロー
- Authorization Code Flow - 標準的なWebアプリ向け
- Authorization Code Flow with PKCE - SPA・モバイル向け
- Client Credentials Flow - サーバー間通信
- OpenID Connect - 認証情報付き
Go 技術スタック
-
HTTP Router:
gorilla/mux
または標準net/http
-
JWT:
golang-jwt/jwt/v5
-
Database:
database/sql
+modernc.org/sqlite
-
Crypto: 標準ライブラリ
crypto/rsa
,crypto/rand
-
HTML Template:
html/template
(管理画面用) -
UUID:
google/uuid
プロジェクト構成
day59_oauth_provider/
├── main.go
├── go.mod
├── go.sum
├── internal/
│ ├── handlers/ # HTTPハンドラー
│ │ ├── oauth.go # OAuth2エンドポイント
│ │ ├── oidc.go # OpenID Connectエンドポイント
│ │ ├── admin.go # 管理API
│ │ └── test.go # テスト用API
│ ├── models/ # データモデル
│ │ ├── client.go
│ │ ├── user.go
│ │ ├── token.go
│ │ └── authcode.go
│ ├── services/ # ビジネスロジック
│ │ ├── oauth.go # OAuth2サービス
│ │ ├── jwt.go # JWT生成・検証
│ │ └── crypto.go # 暗号化処理
│ └── database/ # DB関連
│ ├── db.go
│ └── migrations.go
├── web/ # 静的ファイル・テンプレート
│ ├── templates/
│ │ ├── login.html
│ │ ├── consent.html
│ │ └── admin.html
│ └── static/
└── README.md
主要機能詳細
1. OAuth2 Authorization Code Flow
1. クライアント → /authorize (認可リクエスト)
2. ユーザー認証 → ログイン画面
3. ユーザー同意 → 同意画面
4. 認可コード発行 → redirect_uri にコード返却
5. クライアント → /token (トークンリクエスト)
6. アクセストークン + IDトークン発行
2. JWT トークン仕様
// アクセストークン
{
"iss": "http://localhost:8080",
"sub": "user123",
"aud": "client456",
"exp": 1640995200,
"iat": 1640991600,
"scope": "openid profile email"
}
// IDトークン (OpenID Connect)
{
"iss": "http://localhost:8080",
"sub": "user123",
"aud": "client456",
"exp": 1640995200,
"iat": 1640991600,
"email": "user@example.com",
"name": "Test User"
}
3. PKCE対応
- Code Challenge/Verifier生成・検証
-
code_challenge_method
:S256
- SHA256ハッシュによる検証
セキュリティ対策
- RSA鍵ペア生成(2048bit)
- CSRF保護(state parameter)
- PKCE対応(公開クライアント向け)
- トークン有効期限管理
- Secure Cookie設定
この仕様でGo実装を開始してよろしいでしょうか?
- はい、Go APIで実装を開始してください
- 特定の技術スタックを変更したい
- 機能範囲を調整したい

go で oidc provider つくってから web つくった
このスクラップは1ヶ月前にクローズされました