認証リファレンス(マーケットプレイス版)
マーケットプレイス版の認証エンドポイント仕様、JWT クレーム構造、エラーコードのリファレンスです。
Marketplace 認証エンドポイント一覧
マーケットプレイス版は Client Credentials フローに対応した認証エンドポイントを提供します。サービスアカウントの認証情報でアクセストークンを取得し、API を利用します。
| メソッド | エンドポイント | 説明 |
|---|---|---|
| POST | /api/v1/auth/external-service-token | トークンエンドポイント。Client Credentials フローでアクセストークンを発行します。 |
| GET | /.well-known/jwks.json | JWKS エンドポイント。JWT 署名検証用の公開鍵セットを返します。 |
すべてのエンドポイントは https://<your-domain> をベース URL として使用します。ドメインはマーケットプレイスの管理画面から確認できます。
API を利用するには、管理画面でサービスアカウントを作成し、Client ID と Client Secret を取得してください。サービスアカウントの作成手順は管理画面のドキュメントを参照してください。
Token エンドポイント
POST /api/v1/auth/external-service-token
Client Credentials フローでアクセストークンを発行します。サービスアカウントの認証情報(Client ID / Client Secret)を使用して認証します。
リクエストヘッダー
| ヘッダー | 必須 | 説明 |
|---|---|---|
Content-Type | 必須 | application/json |
リクエストボディ
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
client_id | string | 必須 | サービスアカウントの Client ID(管理画面で発行) |
client_secret | string | 必須 | サービスアカウントの Client Secret(管理画面で発行) |
リクエスト例
curl -X POST https://<your-domain>/api/v1/auth/external-service-token \
-H "Content-Type: application/json" \
-d '{
"client_id": "your_client_id",
"client_secret": "your_client_secret"
}'
レスポンスフィールド(200 OK)
| フィールド | 型 | 説明 |
|---|---|---|
success | boolean | リクエストの成否(成功時は true) |
access_token | string | JWT 形式のアクセストークン |
token_type | string | Bearer |
expires_in | number | アクセストークンの有効期限(秒) |
scope | string | 付与されたスコープ(スペース区切り) |
レスポンス例
{
"success": true,
"access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
"token_type": "Bearer",
"expires_in": 1800,
"scope": "openid"
}
マーケットプレイス版ではリフレッシュトークンは発行されません。トークンの有効期限が切れた場合は、同じ手順で新しいトークンを取得してください。
エラーレスポンス
| ステータス | code | 説明 |
|---|---|---|
400 | missing_parameters | client_id または client_secret が不足 |
401 | invalid_credentials | クライアント認証に失敗(Client ID / Secret が不正) |
500 | server_error | サーバー内部エラー |
エラーレスポンス例
{
"success": false,
"error": "認証情報が正しくありません",
"message": "認証情報が正しくありません",
"code": "invalid_credentials"
}
JWKS エンドポイント
GET /.well-known/jwks.json
JWT 署名検証用の公開鍵セット(JSON Web Key Set)を返します。アクセストークンの署名を検証する場合に使用します。
リクエスト例
curl https://<your-domain>/.well-known/jwks.json
レスポンスヘッダー
| ヘッダー | 説明 |
|---|---|
Cache-Control | public, max-age=3600 |
レスポンス例
{
"keys": [
{
"kid": "...",
"kty": "RSA",
"alg": "RS256",
"use": "sig",
"n": "...",
"e": "AQAB"
}
]
}
鍵のローテーションが行われた場合、kid(Key ID)が変更されます。署名検証時は JWT ヘッダーの kid と一致する鍵を使用してください。鍵はキャッシュ可能ですが、定期的な再取得を推奨します。
JWT クレーム構造
アクセストークンに含まれる JWT クレーム(ペイロード)の構造です。署名アルゴリズムは RS256 です。クレームはフラット構造で出力されます。
標準クレーム
| クレーム | 型 | 説明 |
|---|---|---|
sub | string | サービスアカウント ID(UUID) |
iss | string | 発行者 URL |
aud | string | 対象者(Client ID) |
exp | number | 有効期限(Unix タイムスタンプ) |
iat | number | 発行日時(Unix タイムスタンプ) |
azp | string | Authorized Party(トークンを要求したクライアント ID) |
scope | string | 付与されたスコープ(スペース区切り) |
acr | string | 認証コンテキストクラス |
ユーザー情報
| クレーム | 型 | 説明 |
|---|---|---|
email | string | サービスアカウントのメールアドレス |
email_verified | boolean | メールアドレスが検証されているか |
preferred_username | string | ユーザー名 |
プロフィール(オプション)
管理画面でサービスアカウントにユーザー属性を設定した場合のみ出力されます。
| クレーム | 型 | 説明 |
|---|---|---|
organization | string | 所属組織 |
job | string | 役職 |
bio | string | 自己紹介 |
サービスアカウント情報
| クレーム | 型 | 説明 |
|---|---|---|
client_id | string | クライアント ID |
clientHost | string | リクエスト元ホスト |
clientAddress | string | リクエスト元 IP アドレス |
ロール
| クレーム | 型 | 説明 |
|---|---|---|
realm_access.roles | string[] | 付与されたロール(例: user) |
JWT Access Token Payload 例
{
"sub": "7c6f8a3c-2e1b-4d9f-a5e2-1b4c8d3f2e1a",
"iss": "https://your-domain/auth",
"aud": "account",
"exp": 1678886400,
"iat": 1678884600,
"azp": "my-service-account",
"acr": "1",
"scope": "openid email profile",
"email": "service@example.com",
"email_verified": true,
"preferred_username": "service-account-my-service",
"client_id": "my-service-account",
"clientHost": "192.168.1.100",
"clientAddress": "192.168.1.100",
"realm_access": {
"roles": ["user"]
}
}
クライアント認証
トークンエンドポイントでは、以下のいずれかの方式でクライアント認証を行います。
JSON ボディ
リクエストボディに client_id と client_secret を JSON で含めます。
{"client_id": "xxx", "client_secret": "yyy"}
Basic 認証(推奨)
Authorization ヘッダーに Basic 認証で送信します。リクエストボディは不要です。
Authorization: Basic base64(client_id:client_secret)
Basic 認証でのリクエスト例
curl -X POST https://<your-domain>/api/v1/auth/external-service-token \
-u "your_client_id:your_client_secret"
エラーコード
認証エンドポイントは JSON 形式のエラーレスポンスを返します。すべてのエラーレスポンスには success: false が含まれます。
エラーレスポンス形式
| フィールド | 型 | 説明 |
|---|---|---|
success | boolean | 常に false |
error | string | エラーメッセージ |
message | string | エラーメッセージ(error と同値) |
code | string | エラーコード(機械処理用) |
{
"success": false,
"error": "client_id, client_secret は必須です",
"message": "client_id, client_secret は必須です",
"code": "missing_parameters"
}
エラーコード一覧
| code | ステータス | 説明 |
|---|---|---|
missing_parameters | 400 | 必須パラメータ(client_id / client_secret)が不足 |
invalid_credentials | 401 | クライアント認証に失敗(Client ID / Secret が不正) |
rate_limit_exceeded | 429 | リクエスト回数の上限を超過 |
server_error | 500 | サーバー内部エラー |