跳到內容

Dynamic Client Registration

Dynamic Client Registration 由 RFC 7591 定義,提供了以動態或程式化方式向 Authorization Server 註冊 Client 的機制。

此規範源自 OpenID Connect Dynamic Client Registration 規範,並與 OpenID Connect 伺服器相容。

傳統的 Client 註冊流程需要開發者手動到 Authorization Server 的管理介面建立 Client、取得 client_idclient_secret。這種方式在以下場景會遇到困難:

  • 大量 Client 需要自動化部署——例如微服務架構中,每個服務都是獨立的 Client
  • 第三方平台整合——需要在執行期間動態建立 Client
  • 跨組織協作——無法預先到對方的 Authorization Server 手動註冊
  • AI 工具整合——MCP(Model Context Protocol)讓 AI 應用程式連接不特定數量的 Server,手動註冊不切實際,因此 MCP 規範直接採用 Dynamic Client Registration 作為解決方案

Dynamic Client Registration 讓 Client 可以透過標準化的 API 自動完成註冊。

Client 向 Authorization Server 的 Registration Endpoint 發送 POST 請求:

POST /register HTTP/1.1
Host: auth.example.com
Content-Type: application/json
{
"redirect_uris": ["https://app.example.com/callback"],
"client_name": "My Application",
"grant_types": ["authorization_code"],
"response_types": ["code"],
"token_endpoint_auth_method": "client_secret_basic"
}
欄位說明
redirect_urisClient 的 Redirect URI 列表(必填)
client_nameClient 的顯示名稱
grant_types支援的授權類型(如 authorization_codeclient_credentials
response_types支援的回應類型(如 codetoken
token_endpoint_auth_methodToken Endpoint 的認證方式
scope請求的授權範圍

Authorization Server 回傳新建立的 Client 資訊:

{
"client_id": "s6BhdRkqt3",
"client_secret": "cf136dc3c1fc93f31185e5885805d",
"client_id_issued_at": 1711929600,
"client_secret_expires_at": 0,
"redirect_uris": ["https://app.example.com/callback"],
"client_name": "My Application",
"grant_types": ["authorization_code"],
"response_types": ["code"],
"token_endpoint_auth_method": "client_secret_basic"
}
欄位說明
client_id新建立的 Client ID
client_secretClient Secret(僅 Confidential Client)
client_id_issued_atClient ID 核發時間(Unix timestamp)
client_secret_expires_atClient Secret 到期時間(0 代表不過期)

Registration Endpoint 可以是開放註冊需要認證

  • 開放註冊:任何人都可以註冊 Client,適合公開平台
  • 需要 Initial Access Token:Client 必須持有預先取得的 Token 才能註冊,適合受控環境
POST /register HTTP/1.1
Host: auth.example.com
Authorization: Bearer INITIAL_ACCESS_TOKEN
Content-Type: application/json

MCP(Model Context Protocol)的授權機制是 Dynamic Client Registration 的典型應用場景。MCP Client(如 AI 助理)可能隨時連接全新的 MCP Server,無法事先逐一手動註冊。透過 Dynamic Client Registration,Client 在首次連接時自動註冊取得 client_id,隨即進入 Authorization Code + PKCE 授權流程。

詳細的 MCP 授權流程請參考 MCP Authorization 與 OAuth 2.1

OpenID Connect Dynamic Client Registration 1.0 是此規範的前身。RFC 7591 將其中的 Client 註冊機制通用化,使其不限於 OpenID Connect,也能用於一般的 OAuth 2.0 場景。兩者使用相同的註冊端點格式,OpenID Connect 伺服器通常同時支援兩種規範。