API (v2) 認証
| コマンド | 対応状況 | 備考 |
|---|---|---|
| AUTH | ✅ | ユーザー名/パスワード認証 - localhost のみ |
| AUTHKEY | ✅ | セッション検証 - localhost のみ |
| LOGIN | ✅ | Token/Secret 認証 - リモート専用 |
| WHOAMI | ✅ | セッションからユーザー OID を取得 |
| BYE | ✅ | CCEd から即時切断 |
| ENDKEY | ✅ | セッション終了と無効化 |
AUTH (localhost のみ)
AUTH は有効なユーザー名とパスワードで実行します。成功すると、以後はパスワードの代わりに AUTHKEY 認証で使える sessionId が返されます。この sessionId は、一定時間の経過や無操作による期限切れ、または ENDKEY の送信まで有効です。
curl -sk \
-X POST https://127.0.0.1:9092/v2/cce \
-d '
{
"cmd": "AUTH",
"user": "admin",
"password": "PASSWORD"
}
' \
| jq
レスポンス(成功):
{
"status": 201,
"message": "GOODBYE",
"data": {
"sessionid": "tK46aZ885HA1QxEiti1dlq.....VpQM3cfavn1yxfF8vFEBeoH3"
}
}
レスポンス(失敗):
{
"status": 401,
"message": "GOODBYE",
"data": {
"errors": [
{
"code": 401,
"message": "FAIL"
}
]
}
}
AUTHKEY (localhost のみ)
有効なユーザー名と、まだ期限切れになっていない既存の sessionId を使って認証できます。パスワードは不要です。この方法で開始したセッションも、無操作による期限切れまたは ENDKEY の送信まで有効です。
curl -k -s \
-X POST https://127.0.0.1:9092/v2/cce \
-d '
{
"cmd": "AUTHKEY",
"user": "admin",
"sessionid": "SESSIONID"
}
' \
| jq
レスポンス(成功):
{
"status": 201,
"message": "GOODBYE",
"data": {
"sessionid": "tK46aZ885HA1QxEiti1dlq.....VpQM3cfavn1yxfF8vFEBeoH3"
}
}
レスポンス(失敗):
{
"status": 401,
"message": "GOODBYE",
"data": {
"errors": [
{
"code": 401,
"message": "FAIL"
}
]
}
}
LOGIN (remote only):
LOGIN 認証方式は、許可された IP からのリモートアクセスでのみ利用できます。有効な Client-Secret が必要であり、その Client-Secret は API 呼び出し元のホワイトリスト済み IP アドレスに紐付いていなければなりません。LOGIN に成功すると、API に対する 'serverAdministrator' 権限が与えられます。返されるのは Token と、そのトークンの有効期限日時です。以後のリモートトランザクションでは、このトークンを必ず送る必要があります。トークンは期限切れになるか ENDKEY を送信すると無効になります。
curl -sk \
-X POST https://API_IP:9092/v2/cce \
-H "Content-Type: application/json" \
-H "X-Client-Secret: YOUR-CLIENT-SECRET" \
-d '
{
"cmd": "LOGIN"
}
' \
| jq
レスポンス(成功):
{
"status": 201,
"message": "TOKEN ISSUED",
"data": {
"expires": "2025-05-17T23:49:24-05:00",
"token": "IaKCHhrATt7rp8enHNKC5jyuY8AripmELHXXVheAAKj5CfQD30SKAAAowHHLpSVW"
}
}
レスポンス(失敗):
Unauthorized: invalid client secret
WHOAMI (local usage):
WHOAMI コマンドは、成功するとログイン中ユーザーの CODB Object ID (OID) を返します。失敗時は '-1' を返します。ユーザー名と sessionId の指定が必要です。
curl -k -s \
-X POST https://127.0.0.1:9092/v2/cce \
-d '
{
"cmd": "WHOAMI",
"user": "admin",
"sessionId": "SESSION-ID"
}
' \
| jq
レスポンス(成功):
{
"status": 201,
"message": "GOODBYE",
"data": {
"oid": "6"
}
}
レスポンス(失敗):
{
"status": 201,
"message": "GOODBYE",
"data": {
"errors": [
{
"code": 401,
"message": "FAIL"
}
],
"oid": "-1"
}
}
WHOAMI (remote usage):
リモート利用時の WHOAMI では、Client-Secret に加え、LOGIN 実行時に発行された有効な未期限切れトークンが必要です。成功すると、ログイン中ユーザーの CODB Object ID (OID) を返します。
curl -sk \
-X POST https://API_IP:9092/v2/cce \
-H "Content-Type: application/json" \
-H "X-Client-Secret: CLIENT-SECRET" \
-d '
{
"cmd": "WHOAMI",
"token": "IaKCHhrATt7rp8enHNKC5jyuY8AripmELHXXVheAAKj5CfQD30SKAAAowHHLpSVW"
}
' \
| jq
レスポンス(成功):
{
"status": 201,
"message": "GOODBYE",
"data": {
"oid": "60"
}
}
レスポンス(失敗):
Invalid or expired token
BYE (local usage):
API との接続を終了しますが、sessionId 自体は引き続き有効のままです。
curl -k -s \
-X POST https://127.0.0.1:9092/v2/cce \
-d '
{
"cmd": "BYE",
"user": "admin",
"sessionId": "P07BbypRtaseyjXxSdhIGliNWIUcEhQi6LJ77WMqW2vibgDRkKpQWwtG4bIwhmE"
}
' \
| jq
レスポンス(成功):
{
"status": 201,
"message": "GOODBYE",
"data": {
"DATA": []
}
}
BYE (remote usage):
API との接続を終了しますが、トークン自体は引き続き有効です。
curl -sk \
-X POST https://API-IP:9092/v2/cce \
-H "Content-Type: application/json" \
-H "X-Client-Secret: CLIENT-SECRET" \
-d '
{
"cmd": "BYE"
}
' \
| jq
レスポンス(成功):
{
"status": 202,
"message": "GOODBYE",
"data": {
"DATA": []
}
}
ENDKEY (local usage):
API との接続を終了し、現在の sessionId を失効させます。
curl -k -s \
-X POST https://127.0.0.1:9092/v2/cce \
-d '
{
"cmd": "ENDKEY",
"user": "admin",
"sessionId": "P07BbypRtaseyjXxSdhIGliNWIUcEhQi6LJ77WMqW2vibgDRkKpQWwtG4bIwhmE"
}
' \
| jq
レスポンス(成功):
{
"status": 201,
"message": "GOODBYE",
"data": {
"DATA": []
}
}
ENDKEY (remote usage):
API との接続を終了し、現在のトークンを失効させます。
curl -sk \
-X POST https://API_IP:9092/v2/cce \
-H "Content-Type: application/json" \
-H "X-Client-Secret: CLIENT-SECRET" \
-d '
{
"cmd": "ENDKEY",
"token": "TOKEN"
}
' \
| jq
レスポンス(成功):
{
"status": 201,
"message": "GOODBYE",
"data": {
"DATA": []
}
}