クライアント認証(Client Authentication)機能の開発・修正を行う際に使用。7種のクライアント認証方式、private_key_jwt、tls_client_auth実装時に役立つ。
Scanned 2/12/2026
Install via CLI
openskills install majiayu000/claude-skill-registry---
name: client-authentication
description: クライアント認証(Client Authentication)機能の開発・修正を行う際に使用。7種のクライアント認証方式、private_key_jwt、tls_client_auth実装時に役立つ。
---
# クライアント認証(Client Authentication)開発ガイド
## ドキュメント
- `documentation/docs/content_06_developer-guide/03-application-plane/10-client-authentication.md` - クライアント認証実装ガイド
- `documentation/docs/content_03_concepts/01-foundation/concept-03-client.md` - クライアント概念
## 機能概要
クライアント認証は、クライアントの正当性を検証する層。
- **7種の認証方式**: client_secret_basic, client_secret_post, client_secret_jwt, private_key_jwt, tls_client_auth, self_signed_tls_client_auth, none
- **JWT Assertion検証**: JWS署名検証
- **mTLS認証**: クライアント証明書検証
## モジュール構成
```
libs/
├── idp-server-core/ # クライアント認証コア
│ └── .../oauth/clientauthenticator/
│ ├── ClientAuthenticationHandler.java
│ ├── ClientSecretBasicAuthenticator.java
│ ├── ClientSecretPostAuthenticator.java
│ ├── ClientSecretJwtAuthenticator.java
│ ├── PrivateKeyJwtAuthenticator.java
│ └── clientcredentials/
│ └── ClientCredentials.java
│
├── idp-server-core-extension-fapi/ # mTLS認証(FAPI)
│ └── .../extension/fapi/
│ ├── TlsClientAuthAuthenticator.java
│ └── SelfSignedTlsClientAuthAuthenticator.java
│
└── idp-server-control-plane/ # 管理API
└── .../management/client/
└── ClientManagementApi.java
```
## ClientAuthenticationHandler
`idp-server-core/oauth/clientauthenticator/` 内:
ClientAuthenticationHandlerが、token_endpoint_auth_methodに応じた適切なAuthenticatorを選択します。
## 認証方式別実装
### 1. client_secret_basic
```java
public class ClientSecretBasicAuthenticator {
// HTTP Basic認証
// Authorization: Basic base64(client_id:client_secret)
}
```
### 2. client_secret_post
```java
public class ClientSecretPostAuthenticator {
// リクエストボディでclient_id, client_secretを送信
}
```
### 3. client_secret_jwt
```java
public class ClientSecretJwtAuthenticator {
// JWT Assertionをclient_secretで署名(HMAC)
// client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer
}
```
### 4. private_key_jwt
```java
public class PrivateKeyJwtAuthenticator {
// JWT Assertionをクライアント秘密鍵で署名(RSA/ECDSA)
// JWKSエンドポイントから公開鍵を取得して検証
// client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer
}
```
### 5. tls_client_auth (mTLS)
`idp-server-core-extension-fapi/` 内:
```java
public class TlsClientAuthAuthenticator {
// クライアント証明書のSubject DNを検証
// Client.tlsClientAuthSubjectDn と一致確認
}
```
### 6. self_signed_tls_client_auth (mTLS)
```java
public class SelfSignedTlsClientAuthAuthenticator {
// クライアント証明書全体を検証
// Client.tlsClientAuthCertificate と一致確認
}
```
### 7. none
```java
// Public Client用(認証なし)
// PKCE必須
```
## JWT Assertion形式
```json
{
"iss": "client_id",
"sub": "client_id",
"aud": "https://idp.example.com/token",
"jti": "unique-id",
"exp": 1234567890,
"iat": 1234567890
}
```
## E2Eテスト
```
e2e/src/tests/
└── spec/
├── oidc_core_9_client_authenticartion.test.js # クライアント認証仕様
├── rfc6749_4_1_code_secret_basic.test.js # client_secret_basic
└── rfc7523_jwt_bearer_assertion.test.js # JWT Assertion
```
## コマンド
```bash
# ビルド
./gradlew :libs:idp-server-core:compileJava
./gradlew :libs:idp-server-core-extension-fapi:compileJava
# テスト
cd e2e && npm test -- spec/oidc_core_9_client_authenticartion.test.js
cd e2e && npm test -- spec/rfc7523_jwt_bearer_assertion.test.js
```
## トラブルシューティング
### client_secret認証失敗
- client_secretが正しいか確認
- client_secret_basic: Base64エンコーディングを確認
- client_secret_post: パラメータ名を確認
### private_key_jwt検証失敗
- JWKSエンドポイントが正しいか確認
- JWT署名アルゴリズム(RS256, ES256)を確認
- JWT Assertionのaud, iss, subを確認
### mTLS認証失敗
- クライアント証明書が正しく送信されているか確認
- tls_client_auth: Subject DNが一致するか確認
- self_signed_tls_client_auth: 証明書全体が一致するか確認
No comments yet. Be the first to comment!