メインコンテンツまでスキップ

クライアント(Client)

Client(クライアント)は、OAuth 2.0/OIDCプロトコルを使用してリソースにアクセスするアプリケーションです。

idp-serverにおけるクライアントは、テナントに所属し、そのテナントのユーザーに代わって認証・認可を実行する主体です。

idp-serverにおけるクライアントの特徴

  • テナント完全分離: クライアントは必ず1つのテナントに所属し、テナント間での共有なし
  • RFC標準のクライアント設定をサポート: OAuth 2.0/OpenID Connect仕様に完全準拠
  • 拡張機能: トークン有効期限、Federation制限、CIBA設定等のカスタマイズ

クライアントでできること

クライアントを登録することで、以下のことが可能になります:

  • ユーザー認証の実行 ユーザーに代わってOAuth/OIDC認証を実行し、認可を取得

  • アクセストークンの取得 認可コードをアクセストークンに交換し、保護されたAPIにアクセス

  • リソースアクセスの委任 スコープに応じた権限でユーザーのリソース(プロフィール、メール等)にアクセス

  • M2M通信(Machine-to-Machine) Client Credentials Flowでユーザー認証なしのサービス間通信

  • 長期セッション管理 Refresh Tokenで再認証なしのトークン更新、UX向上


クライアントの基本概念

OAuth 2.0仕様では、クライアントをConfidential ClientPublic Clientの2種類に分類します。

1. Confidential Client(秘密クライアント)

client_secretを安全に保管できるクライアント。

特徴:

  • サーバーサイドでclient_secretを保管
  • client_secretを使った強固なクライアント認証
  • 高いセキュリティレベル

代表例:

  • Webアプリケーション(サーバーサイドレンダリング)
  • バックエンドサービス(M2M通信)

2. Public Client(公開クライアント)

client_secretを安全に保管できないクライアント。

特徴:

  • クライアントコードがユーザーに露出
  • client_secretを持たない
  • PKCE(Proof Key for Code Exchange)必須

代表例:

  • SPA(Single Page Application)
  • モバイルアプリ(iOS/Android)
  • ネイティブデスクトップアプリ

Confidential vs Public 比較

項目Confidential ClientPublic Client
client_secret✅ 保持❌ 保持不可
実行環境サーバーサイドブラウザ/モバイルアプリ
PKCE任意(推奨)必須
セキュリティレベル中(PKCE使用時)
認証方法client_secret_basic
client_secret_post
private_key_jwt
tls_client_auth
none

RFC準拠: RFC 6749 Section 2.1 - Client Types


認証方法(Token Endpoint Authentication Methods)

クライアントがトークンエンドポイントで自身を証明する方法。

認証方法説明セキュリティ用途
client_secret_basicHTTPベーシック認証でclient_secret送信Webアプリ(一般的)
client_secret_postリクエストボディでclient_secret送信Webアプリ(Basic認証非対応)
client_secret_jwtclient_secretで署名したJWTを送信セキュリティ要件が高い環境
private_key_jwt秘密鍵で署名したJWTを送信最高金融グレード(FAPI)
tls_client_authクライアント証明書(mTLS)最高金融グレード(FAPI)
none認証なし(PKCEで保護)低(PKCE必須)SPA、モバイルアプリ

RFC準拠:


主要なユースケース

idp-serverは、RFC標準パラメータの組み合わせで代表的なユースケースに対応します。

1. Webアプリケーション(サーバーサイド)

概念: サーバー側でclient_secretを安全に保管できるアプリケーション(Confidential Client)

主なパラメータ:

  • token_endpoint_auth_method: client_secret_basic
  • grant_types: authorization_code, refresh_token
  • application_type: web

詳細設定: Developer Guide: Webアプリケーション設定


2. SPA(Single Page Application)

概念: ブラウザのみで動作し、client_secretを持たないアプリケーション(Public Client)

主なパラメータ:

  • token_endpoint_auth_method: none(PKCE必須)
  • grant_types: authorization_code, refresh_token
  • application_type: web

詳細設定: Developer Guide: SPA設定


3. モバイルアプリ(iOS/Android)

概念: ネイティブアプリで長期セッションを維持するアプリケーション(Public Client)

主なパラメータ:

  • token_endpoint_auth_method: none(PKCE必須)
  • grant_types: authorization_code, refresh_token
  • application_type: native
  • redirect_uris: カスタムURLスキーム(例: com.example.myapp://callback

詳細設定: Developer Guide: モバイルアプリ設定


4. M2M(Machine-to-Machine)

概念: ユーザー認証なしのサービス間通信(Confidential Client)

主なパラメータ:

  • token_endpoint_auth_method: client_secret_basic / private_key_jwt
  • grant_types: client_credentials
  • redirect_uris: 空配列(不要)
  • scope: カスタムスコープ(例: api:read, api:write

詳細設定: Developer Guide: M2M設定


5. 金融グレード(FAPI準拠)

概念: 最高レベルのセキュリティを要求するアプリケーション(Confidential Client)

主なパラメータ:

  • token_endpoint_auth_method: private_key_jwt / tls_client_auth
  • grant_types: authorization_code, refresh_token
  • require_pushed_authorization_requests: true(PAR必須)
  • jwks_uri: 公開鍵配置URL

詳細設定: Developer Guide: FAPI設定

RFC準拠: FAPI 1.0 Advanced Profile


クライアントと他機能の関係

Tenant、User、Tokenとの関係

マルチテナント分離:

  • クライアントは必ず1つのテナントに所属
  • テナント間でのクライアント情報共有なし

委任(Delegation)モデル:

  • クライアントはユーザーの代理人として動作
  • ユーザーが明示的に同意した範囲でのみリソースアクセス

トークン発行:

  • Authorization Code Flow: ユーザーに代わってトークン発行
  • Client Credentials Flow: クライアント自身の権限でトークン発行(user_id=null)

詳細: Concept 01: マルチテナント


Scopeとの関係

役割分担:

  • Client: 利用可能なスコープを定義(scopeフィールド)
  • Tenant: テナント全体で利用可能なスコープを定義(scopes_supported

検証ルール: 認証リクエストのスコープは、ClientとTenantの両方の設定範囲内である必要がある


idp-serverにおけるClient管理の特徴

idp-serverは、OAuth 2.0/OIDC仕様に準拠しつつ、エンタープライズ環境での運用を考慮した独自機能を提供します。

マルチテナント分離

  • クライアントは必ず1つのテナントに所属
  • Repository層でのTenantIdentifier検証(第一引数パターン)
  • Cross-tenant accessの試行は監査ログに記録

詳細: Concept 01: マルチテナント


UUID必須設計

client_idUUID形式必須(任意文字列不可)

理由: グローバル一意性、予測不可能性、データベース最適化


拡張機能(extension)

RFC標準に加えて、独自の拡張機能を提供:

機能説明
トークン有効期限クライアント単位でAccess Token/Refresh Tokenの有効期限を設定
Federation制限クライアント固有の利用可能外部IdPを制限
CIBA設定デフォルトの認証インタラクションタイプを指定
Client ID Alias人間可読なエイリアスを設定(ログ・監査用)
カスタムプロパティ任意のキー・バリューデータを付与し、認可画面のUI表示カスタマイズ等に利用

詳細設定: Developer Guide: Client設定


まとめ

クライアントは、OAuth/OIDC認証の起点となる重要な概念です。

重要なポイント:

  • Confidential vs Public Clientの適切な選択
  • セキュリティとユーザー体験のバランス
  • ユースケース別の最適な設定
  • Tenant、Scope、Token、Userとの関係理解

idp-server固有の特徴:

  • マルチテナント完全分離
  • UUID必須設計
  • Management API / DCRの2つの登録方法
  • Dry Run機能
  • 柔軟な拡張機能(extension)

関連ドキュメント

How-to ガイド

Developer Guide

Concepts


参考仕様

OAuth 2.0 / OpenID Connect

クライアント認証

金融グレード