DKE API
DKE 365 サービスをデプロイ・運用するための認証済みマネジメント API、および Microsoft 365 / Office が直接呼び出す公開 DKE プロトコルエンドポイント。
DKE 365 API には 2 つのエンドポイントファミリー があります。マネジメント API(/api/dke/…)は Cockpit ユーザーセッションで認証され、Operations.Dke.* 権限によって制御され、DKE サービスのデプロイ・構成・運用を行います。公開 DKE プロトコル(/dke/…、/api プレフィックスなし)は、Microsoft Office がコンテンツの暗号化・復号のために呼び出すサーフェスです。
| ファミリー | ベースパス | 認証 | 目的 |
|---|---|---|---|
| マネジメント API | /api/dke/… | Cockpit ユーザーセッション(JWT)、Operations.Dke.* 権限 | DKE サービスのデプロイ・構成・管理 |
| 公開 DKE プロトコル | /dke/…(/api なし) | GetKey は公開、Decrypt は Azure AD ベアラートークンを検証 | Microsoft 365 / Office が直接呼び出すエンドポイント |
マネジメント API
Cockpit ユーザーセッション(JWT)で認証されます。各ルートは、記載されている Operations.Dke.* 権限を必要とします。
| メソッド + パス | 目的 | 権限 |
|---|---|---|
GET /api/dke/services | DKE サービスの一覧取得 | Operations.Dke.Read |
POST /api/dke/services | 新しいサービスのデプロイ | Operations.Dke.Create |
POST /api/dke/services/validate-key | キーが DKE 対応か(RSA-2048/4096)を検証 | Operations.Dke.Create |
GET /api/dke/services/{id} | サービスの取得 | Operations.Dke.Read |
PUT /api/dke/services/{id} | サービスの更新 | Operations.Dke.Update |
DELETE /api/dke/services/{id} | サービスの削除 | Operations.Dke.Delete |
POST /api/dke/services/{id}/enable | 有効化(Azure AD アプリを自動プロビジョニング) | Operations.Dke.Enable |
POST /api/dke/services/{id}/disable | 無効化 | Operations.Dke.Disable |
POST /api/dke/services/{id}/stop | 停止 | Operations.Dke.Disable |
POST /api/dke/services/{id}/rotate-key | RSA キーのローテーション(重複期間あり) | Operations.Dke.Update |
GET /api/dke/services/{id}/health | サービスのヘルス | Operations.Dke.Read |
GET /api/dke/services/{id}/deploy-config | クライアントデプロイ構成のダウンロード | Operations.Dke.Read |
GET /api/dke/services/{id}/onboarding | DNS / CNAME オンボーディングガイダンス | Operations.Dke.Read |
POST /api/dke/provision-azure-app | Azure AD アプリを単独でプロビジョニング | Operations.Dke.Create |
GET /api/dke/defaults | ウィザードのデフォルト値(ベースドメイン、オーディエンスドメイン、デフォルト IdP) | (認証のみ) |
POST /api/dke/resolve-domain(s) | B2B パートナードメインを有効な発行者に解決 | Operations.Dke.Read |
独立した「登録」エンドポイントはありません — 登録 = デプロイ → 有効化です。/api/dke/services/{id}/enable において、サービスに identity_provider_id があり、まだ Azure アプリがない場合、Cockpit v2 は Microsoft Graph を呼び出して Azure AD アプリ登録を作成し、生成された azure_client_id、azure_audience、azure_app_object_id を保存します。
デプロイリクエストの例
{
"name": "Contoso DKE",
"slug": "89c3b193-af16-4887-8031-43f88d475d9d",
"key_id": "<rsa-key-uuid>",
"key_name": "dke_key",
"azure_tenant_id": "<azure-tenant-guid>",
"azure_client_id": "<app-guid>",
"azure_audience": "https://89c3b193-af16-4887-8031-43f88d475d9d.duokey365.com",
"allowed_domains": ["partner.com"],
"algorithm": "RSA-OAEP-256",
"cache_duration_hours": 24,
"mtls_enabled": false,
"allow_anonymous": false,
"access_policy_id": "<policy-uuid>",
"identity_provider_id": "<idp-uuid>"
}
公開プロトコル
Microsoft Office が直接呼び出すエンドポイントで、/api プレフィックスなしで提供されます。サービスは slug(GUID)で特定されます。GetKey は公開です — 誰でも公開された公開鍵を取得できます。Decrypt は Azure AD ベアラートークンを検証します(さらにサービスに紐づいたアクセスポリシーを適用します)。その後アンラップを行います。
| メソッド + パス | 名前 | 認証 | 目的 |
|---|---|---|---|
GET /dke/{slug}/version | Version | 公開 | プロトコル/サービスバージョンの確認 |
GET /dke/{slug}/{key_id} | GetKey | 公開 | コンテンツの暗号化に使用する公開 RSA JWK を返す |
POST /dke/{slug}/{key_id}/decrypt | Decrypt | Azure AD ベアラートークン | Vault が保持する秘密鍵を使用してラップされたキーをアンラップ |
kid による旧来の名前指定バリアントの GetKey と Decrypt も提供されており、キーは key_id ではなく key_name によって特定されます。これは、Office がキャッシュしている可能性のある kid URL に一致させるためです。公開される kid はサービスの完全な URL であり、https://{slug}.{base-domain}/dke/{slug}/{key_name}/{key_id} です。
ステータスが Running のサービスのみが復号リクエストを処理します。Decrypt は slug によってサービスを解決し、実効キー(現行キー、またはローテーションの重複期間中は 1 つ前のキー)を選択し、任意で mTLS 検証を行い、Azure AD JWT を検証し、紐づいたアクセスポリシーを適用したうえで、Vault アダプターを使用して RSA-OAEP 復号を行います。秘密鍵が Vault の外に出ることはありません。
プロトコルの詳細
公開される JWK の特殊仕様
GetKey が返す公開鍵は標準的な RSA JWK ですが、Microsoft の DKE 特有の仕様に従います — クライアント(および再実装を行う場合)は、正確に次の点を考慮する必要があります。
| フィールド | 値/エンコーディング |
|---|---|
n | RSA モジュラス。標準 Base64(base64url ではない)でエンコード |
e | 公開指数を整数として表記(例: 65537)。base64url 文字列ではない |
alg | RS256 |
kid | サービスキーの完全な URL |
Decrypt のリクエスト/レスポンスボディ
Decrypt エンドポイントは、ラップされたキーを受け取り、アンラップされたキーを返します。値は Base64 です。
{
"alg": "RSA-OAEP-256",
"value": "<base64 ciphertext>"
}
{
"value": "<base64 plaintext>"
}
各復号リクエストは、暗号ティアの下でクライアント IP ごとにレート制限されます(1000 リクエスト/分)。
関連: Oracle TDE PKCS#11 プロキシ
Oracle Transparent Data Encryption 向けに、DuoKey は独立した PKCS#11 プロキシエンドポイント POST /api/apps/{app_id}/tde/pkcs11/{access_guid} を公開しており、URL に埋め込まれた access_guid ベアラートークンのみで認証されます。詳細は Oracle TDE 統合ガイドを参照してください。