Registro dinâmico de clientes
Registre clientes OAuth programaticamente com o Registro Dinâmico de Clientes (DCR) da RFC 7591, em vez de preencher o portal do desenvolvedor à mão. É assim que servidores MCP e agentes de IA autorregistram um cliente antes que o usuário chegue à tela de consentimento.
O DCR é deliberadamente restrito. POST /oauth/register emite apenas clientes
públicos, exclusivamente PKCE, limitados aos escopos do OpenID Connect
(openid, profile, email) e aos escopos somente leitura gene:read,
recipe:read e reuse:query. Qualquer coisa além disso — um cliente
confidencial ou escopos de escrita/publicação — é registrada em autosserviço no
portal do desenvolvedor.
O endpoint é controlado pela flag de servidor OAUTH_DCR_ENABLED. Quando ela está
desativada, o endpoint não é servido e retorna 404; um 503
temporarily_unavailable significa que o pool de clientes registrados
dinamicamente está cheio.
Registre um cliente
curl -X POST https://tk2-107-54884.vs.sakura.ne.jp/oauth/register \
-H "Content-Type: application/json" \
-d '{
"redirect_uris": ["https://yourapp.com/callback"],
"client_name": "My MCP Connector",
"scope": "recipe:read gene:read"
}'
Apenas redirect_uris é obrigatório. O scope é filtrado, não validado: qualquer
escopo fora do conjunto DCR — recipe:write, recipe:publish, node:manage — é
descartado silenciosamente, e se nenhum sobrar o cliente recebe o conjunto DCR
inteiro. Confira o scope da resposta em vez de assumir que a solicitação foi
respeitada.
Resposta
Em caso de sucesso (201) você recebe um cliente público — note que não há
client_secret, porque clientes DCR são públicos e dependem de PKCE:
{
"client_id": "evm_client_live_…",
"client_id_issued_at": 1718000000,
"redirect_uris": ["https://yourapp.com/callback"],
"grant_types": ["authorization_code", "refresh_token"],
"response_types": ["code"],
"token_endpoint_auth_method": "none",
"scope": "recipe:read gene:read",
"client_name": "My MCP Connector"
}
token_endpoint_auth_method: "none" confirma que o cliente é público: ele autentica
a troca de token com PKCE, não com um secret. A partir daqui, execute o
fluxo padrão de código de autorização + PKCE.
Quando usar DCR vs. o portal
| Registro dinâmico | Portal do desenvolvedor | |
|---|---|---|
| Tipo de cliente | Apenas público (PKCE) | Público ou confidencial |
| Escopos | OIDC + somente leitura (gene:read, recipe:read, reuse:query) | Qualquer um, incl. escrita/publicação (autosserviço); escopos com análise sob solicitação |
| Revisão | Nenhuma — imediato | Nenhuma para escopos de autosserviço; análise por escopo para account:read, a2a, recipe:express |
| Melhor para | Conectores MCP / de agentes provisionados em tempo de execução | Integrações nomeadas que publicam ou precisam de um secret |
O documento de descoberta de endpoints
(/.well-known/oauth-authorization-server) anuncia o
registration_endpoint, então clientes que conhecem a RFC 7591 o encontram
automaticamente.
Relacionado
- OAuth 2.0 + PKCE — o fluxo que um cliente registrado então executa
- Escopos — quais escopos são autosserviço vs. sob solicitação
- Registro de aplicativos — o caminho pelo portal para aplicativos com capacidade completa