クライアント登録ガイド
このドキュメントの目的
クライアント(アプリケーション)を登録し、認可フローが動作する環境を構築することが目標です。
具体的には、3つの代表的なクライアントタイプ(Webアプリ、モバイルアプリ、M2M)を登録し、それぞれの認証方式を理解します。
学べること
✅ OAuth/OIDCクライアント登録の基礎
- クライアントとは何か(Confidential vs Public)
- 3つの代表的なクライアントタイプ(Web/Mobile/M2M)
- 必須設定項目(client_id, redirect_uris, grant_types等)
✅ 実践的な知識
- クライアント登録の実行手順
- 登録確認方法
- トラブルシューティング
所要時間
⏱️ 約15分
このドキュメントの位置づけ
Phase 1: 最小構成で動作確認(Step 3/5)
前提ドキュメント:
次のドキュメント:
- ユーザー登録 - ユーザー作成と認証
前提条件
- how-to-02でテナント作成完了
- 組織管理者トークンを取得済み
- 組織ID・テナントIDを確認済み
クライアントとは
Client(クライアント)は、OAuth 2.0/OIDCプロトコルを使用してリソースにアクセスするアプ リケーションです。
クライアントには以下の2種類があります:
- Confidential Client(機密クライアント):
client_secretを安全に保管できる(例:サーバーサイドWebアプリ) - Public Client(公開クライアント):
client_secretを保管できない(例:SPA、モバイルアプリ)
詳細: 📖 Concept 19: Client - Client種別、認証方法、Tenant-Client-User関係の詳細解説
このドキュメントで行うこと
3つの代表的なクライアントタイプを登録します:
1. 組織管理者トークンの準備
前提: how-to-02で設定した環境変数を使用します。
# 接続先サーバーURL
IDP_SERVER_URL=http://localhost:8080
# 環境変数の確認
echo "Organization ID: $ORGANIZATION_ID"
echo "Public Tenant ID: $PUBLIC_TENANT_ID"
echo "Admin Token: ${ORG_ADMIN_TOKEN:0:50}..."
まだ設定していない場合は、how-to-02を参照してトークンを取得してください。
動作確認:3つのクライアントタイプを登録する
1. Webアプリケーション(Confidential Client)
特徴: サーバー側でclient_secretを安全に保管できる
クライアントIDの準備
# クライアントID設定(UUID必須)
export WEB_CLIENT_ID=$(uuidgen | tr '[:upper:]' '[:lower:]')
export WEB_CLIENT_SECRET="$(openssl rand -base64 32)"
# 確認
echo "Web Client ID: $WEB_CLIENT_ID"
echo "Web Client Secret: $WEB_CLIENT_SECRET"
クライアント登録
curl -X POST "${IDP_SERVER_URL}/v1/management/organizations/${ORGANIZATION_ID}/tenants/${PUBLIC_TENANT_ID}/clients" \
-H 'Content-Type: application/json' \
-H "Authorization: Bearer ${ORG_ADMIN_TOKEN}" \
-d "{
\"client_id\": \"${WEB_CLIENT_ID}\",
\"client_secret\": \"${WEB_CLIENT_SECRET}\",
\"client_name\": \"My Web Application\",
\"redirect_uris\": [
\"https://app.example.com/callback\",
\"http://localhost:3000/callback\"
],
\"response_types\": [\"code\"],
\"grant_types\": [\"authorization_code\", \"refresh_token\"],
\"scope\": \"openid profile email\",
\"token_endpoint_auth_method\": \"client_secret_basic\",
\"application_type\": \"web\"
}" | jq .
期待されるレスポンス:
{
"dry_run": false,
"result": {
"client_id": "web-app-client",
"client_name": "My Web Application",
"redirect_uris": [
"https://app.example.com/callback",
"http://localhost:3000/callback"
],
"response_types": ["code"],
"grant_types": ["authorization_code", "refresh_token"],
"token_endpoint_auth_method": "client_secret_basic",
"application_type": "web"
}
}
確認ポイント
- ✅
client_idが正しく登録されている - ✅
redirect_urisに2つのURIが含まれている - ✅
token_endpoint_auth_methodがclient_secret_basic - ✅
grant_typesにauthorization_codeとrefresh_tokenが含まれている
2. モバイルアプリ(Public Client + PKCE)
特徴: client_secret不要、PKCE必須