Autenticação
Auth Keys
Para solicitações multipart de criação de Assembly autenticadas com uma Auth Key, inclua um objeto auth
dentro do campo de formulário params codificado em JSON. O menor valor de params para esse caso é mostrado abaixo.
{
"auth": {
"key": "23c96d084c744219a2ce156772ec3211"
}
}
O campo key se refere à Auth Key associada ao seu Workspace da Transloadit, encontrada
na página Credenciais. O exemplo acima é o objeto mínimo de autenticação para
uma solicitação de Assembly que usa uma Auth Key. Outros endpoints e métodos de autenticação podem usar
formatos de solicitação diferentes, conforme descrito na documentação de cada endpoint e abaixo.
As Assemblies que usam /transloadit/import, diretamente ou por meio de um Template, exigem
um token bearer ou params assinado com um timestamp futuro em params.auth.expires.
Isso se aplica mesmo quando a Signature Authentication do Workspace está desativada. Uma Auth Key sozinha
não é suficiente; solicitações autenticadas com bearer não precisam de assinatura nem de expiração separadas.
Os Builtin Templates públicos de Storage são a exceção: eles podem atender a solicitações sem assinatura somente
quando todas as importações de Storage permanecem dentro de um prefixo declarado como público. Isso não autoriza
Assemblies sem assinatura com Steps arbitrários nem acesso a caminhos privados de Storage.
Signature Authentication
Recomendamos ativar a Signature Authentication na sua conta, especialmente se você estiver integrando a Transloadit a partir de um ambiente não confiável (como o navegador com Uppy). Você pode ativar a Signature Authentication nas Configurações do Workspace.
Recomendamos fortemente ativar a Signature Authentication ao interagir com nossa API, especialmente em ambientes não confiáveis nos quais os usuários possam acessar sua Auth Key.
Com a Signature Authentication ativada, o Auth Secret do seu Workspace (encontrado
ao lado da sua Auth Key na página Credenciais) é
usado como chave para um HMAC gerado a partir dos bytes exatos do valor serializado de params. Esse valor contém tanto uma key (que é sua
Auth Key, como mencionado anteriormente) quanto um parâmetro expires, que é um timestamp em um futuro
próximo usado como data de expiração da solicitação.
Para criar Assemblies com a Transloadit, seu back-end poderia calcular uma assinatura que abranja apenas determinados parâmetros, usuários autenticados e um intervalo de tempo que considere um uso legítimo. Por exemplo, ele se recusaria a gerar uma assinatura para usuários que não estejam conectados. Você poderia usar qualquer lógica de negócio no servidor para decidir se fornece uma assinatura ou não. A Transloadit pode exigir uma assinatura correta para o payload quando uma solicitação à API é autenticada com sua Auth Key.
Para exigir Signature Authentication em solicitações à API autenticadas com sua Auth Key:
- Acesse as Configurações do Workspace na sua conta.
- Na seção Configurações da API, ative a opção Exigir uma assinatura correta.
- Aguarde a conclusão do salvamento automático.
Tokens bearer válidos dispensam os requisitos de assinatura, incluindo as configurações do Workspace e do Template; os escopos do token e as restrições de público-alvo continuam se aplicando. Essas configurações não adicionam autenticação ao acesso baseado em URLs que conferem acesso, como URLs de status de Assembly, cancelamento ou upload retomável. Mantenha os Assembly IDs e as URLs que conferem acesso em sigilo e siga as orientações de autenticação de cada endpoint.
A maioria dos SDKs de back-end usa Signature Authentication automaticamente quando você fornece seu Auth Secret. Então, talvez esta introdução seja tudo o que você precisa saber. Se, porém, você estiver integrando a Transloadit em ambientes não confiáveis, como navegadores (Uppy!), continue lendo para ver como seu back-end pode fornecer assinaturas para essa integração.
Como gerar assinaturas
Como tudo isso funciona na prática?
O campo params típico ao criar uma Assembly sem Signature Authentication
é o seguinte:
{
"auth": {
"key": "23c96d084c744219a2ce156772ec3211"
},
"steps": {
// …
}
}
A auth.key neste exemplo é a Auth Key das
Credenciais da API na sua conta.
Para assinar essa solicitação, é necessário adicionar o campo auth.expires. Isso o adiciona ao nosso
payload, que é protegido pela nossa assinatura. Se alguém o alterasse, a Transloadit rejeitaria
a solicitação porque a assinatura não corresponderia mais. Você assinou um payload diferente daquele que
recebemos. Se a assinatura corresponder, compararemos a data e rejeitaremos a solicitação conforme
instruído. Dessa forma, fica muito difícil para um terceiro que tenha obtido esse payload repetir
as solicitações indefinidamente. Embora nosso HTTPS com classificação A+ já ajude bastante a
impedir isso, o cache do navegador pode ser mais fácil de inspecionar indevidamente.
A propriedade expires deve conter um timestamp em um futuro (próximo). Use o formato ISO 8601
(YYYY-MM-DDTHH:mm:ss.sssZ) para a data, garantindo que o fuso horário seja UTC. Por
exemplo:
{
"auth": {
"key": "23c96d084c744219a2ce156772ec3211",
"expires": "YOUR_FUTURE_ISO_8601_TIMESTAMP"
},
"steps": {
// …
}
}
Para calcular a assinatura dessa solicitação:
- No front-end, serialize o objeto JavaScript acima em JSON e envie-o para seu back-end.
- No back-end, calcule uma assinatura HMAC hexadecimal em conformidade com a RFC 6234
sobre a string, usando seu Auth Secret como chave e o algoritmo
configurado em
signature_algoda sua Auth Key. Novas Auth Keys usamsha384por padrão. Auth Keys legadas sem um algoritmo configurado aceitamsha384,sha256ousha1. Adicione ao início da stringsignatureo nome do algoritmo em letras minúsculas. Por exemplo, o algoritmo padrão usasha384:<HMAC-signature>. Você pode enviar essa string para o front-end (desde que tenha feito as verificações apropriadas para garantir que era uma solicitação legítima do seu front-end). - No front-end, adicione à solicitação um campo multipart POST
signaturecontendo esse valor (por exemplo, com um campo oculto em um formulário HTML).
Se sua implementação usa template_id em vez de steps, não é necessário
gerar uma assinatura para as Instructions contidas no seu Template. Devemos
assinar apenas os payloads de comunicação.
Recomendamos fortemente incluir um valor params.nonce gerado aleatoriamente para cada solicitação
no nível superior de params. Isso torna distintas as assinaturas geradas de forma independente e evita a
reutilização acidental de assinaturas. Um nonce não torna as novas tentativas idempotentes: repetir uma solicitação de criação de Assembly
pode criar outra Assembly. Trate a deduplicação de novas tentativas na sua aplicação quando necessário.
Não reutilize params assinado entre endpoints. Leituras de Template, listagem de Auth Keys, listagem de credenciais de Template
e leituras de faturamento rejeitam assinaturas já registradas para um endpoint diferente ou usadas
para criar uma Assembly, com SIGNATURE_REUSE_DETECTED. Gere novos params assinados para cada solicitação.
A solicitação completa deve ser semelhante à seguinte:
{
"params": {
"auth": {
"key": "23c96d084c744219a2ce156772ec3211",
"expires": "YOUR_FUTURE_ISO_8601_TIMESTAMP",
},
"nonce": "04ac6cb6-df43-41fb-a7fd-e5dd711a64e1",
"steps": {
// …
},
},
"signature": "sha384:YOUR_SIGNATURE",
}
Quando a Transloadit recebe a solicitação, também geramos uma assinatura seguindo o mesmo
processo e comparamos as duas assinaturas. Se forem diferentes, nossos servidores
responderão com INVALID_SIGNATURE.
Em resumo, o processo é o seguinte:
- Gere um payload JSON para enviar à Transloadit como o campo
params. - Calcule uma assinatura com base no conteúdo do payload, usando seu Auth Secret como chave.
- Envie a solicitação à Transloadit, com a assinatura no campo
signature - A Transloadit calculará a mesma assinatura usando o Auth Secret da sua conta e o conteúdo do payload.
- Se as assinaturas corresponderem, a solicitação será permitida e uma resposta apropriada será enviada.
Caso contrário, a solicitação será negada e um erro será retornado com o código
INVALID_SIGNATURE.
Isso permite que a Transloadit autentique quem faz a chamada e verifique a integridade de params, pois um terceiro
não conseguiria calcular uma assinatura correspondente sem acesso ao seu Auth Secret. O TLS autentica a Transloadit perante seu cliente
e protege a conexão. A assinatura de webhooks é um fluxo separado para solicitações que a Transloadit envia aos
seus servidores.
Abaixo estão alguns exemplos de como fazer uma solicitação POST para criar uma Assembly. Recomendamos fortemente usar um dos nossos SDKs, que geram assinaturas automaticamente e são bem testados.
Webhooks são assinados de forma diferente das solicitações à API.
A Transloadit assina os bytes exatos da string JSON no campo de formulário transloadit usando
HMAC-SHA1 e o Auth Secret aplicável. O campo signature contém
o resumo hexadecimal sem um prefixo de algoritmo. Siga as
instruções de verificação de webhooks, incluindo como selecionar o Auth Secret,
em vez de usar os exemplos de assinatura de solicitações à API abaixo.
Exemplos de código para diferentes linguagens
Os exemplos abaixo demonstram a criação de Assemblies usando nossos SDKs oficiais. Os SDKs cuidam de toda a geração de assinaturas internamente, tornando a integração mais simples e segura.
// yarn add @transloadit/node
// or
// npm install --save @transloadit/node
import { Transloadit } from '@transloadit/node'
const transloadit = new Transloadit({
authKey: 'YOUR_TRANSLOADIT_KEY',
authSecret: 'YOUR_TRANSLOADIT_SECRET',
})
const response = await transloadit.createAssembly({
params: {
template_id: 'YOUR_TRANSLOADIT_TEMPLATE_ID',
// your other params like notify_url, fields, etc.
},
waitForCompletion: true,
})
console.log(response)
Se precisar calcular uma assinatura separadamente (por exemplo, para uso no front-end), você pode usar
calcSignature:
const { signature, params } = transloadit.calcSignature({
template_id: 'YOUR_TRANSLOADIT_TEMPLATE_ID',
})
console.log(signature, params)
Se preferir ver os detalhes da implementação da assinatura diretamente (por exemplo, para implementar a assinatura em uma
linguagem para a qual não temos um SDK), consulte os links do código-fonte acima. A assinatura é um
resumo HMAC hexadecimal em conformidade com a RFC 6234, calculado sobre a
string params codificada em JSON, usando seu Auth Secret como
chave e o algoritmo configurado em signature_algo da sua Auth Key. Novas Auth Keys usam
sha384 por padrão. Adicione ao início da assinatura o nome do algoritmo em letras minúsculas
(por exemplo, sha384:...).
curl --fail-with-body -sS --location 'https://api2.transloadit.com/assemblies' \
--form 'params={"auth":{"key":"23c96d084c744219a2ce156772ec3211","expires":"YOUR_FUTURE_ISO_8601_TIMESTAMP"},"template_id":"9cf67cbba601e37ee10c442b037e0"}' \
--form 'signature=sha384:YOUR_SIGNATURE' \
--form 'files=@/path/to/your/file.jpg'
URLs assinadas do Smart CDN
Para assinar uma URL do Smart CDN, usa-se um processo semelhante ao das assinaturas comuns da API. Um resumo HMAC é calculado sobre uma string derivada da URL do Smart CDN, usando o Auth Secret como chave. Para que a assinatura seja válida, a Auth Key usada deve estar habilitada para uso com o Smart CDN.
Para gerar uma URL assinada do Smart CDN, use a Auth Key designada para uso com o Smart CDN na sua
página de Credenciais. As URLs do Smart CDN exigem sha256. Assinaturas de solicitações comuns à API
usam o algoritmo configurado em signature_algo da Auth Key; novas Auth Keys usam
sha384 por padrão.
As assinaturas legadas do Smart CDN baseadas em s= e expires= estão obsoletas. Novas integrações devem
sempre usar sig= com exp=.
A geração de uma assinatura do Smart CDN deve ser feita no back-end. O processo usa o Auth Secret, que é confidencial e não deve ser exposto aos seus usuários no front-end.
Uma URL típica do Smart CDN tem a seguinte estrutura:
https://[your-workspace].tlcdn.com/[template-name]/[file-path]?[parameters]
[your-workspace]é o nome do seu Workspace da Transloadit[template-name]é o nome do seu Template[file-path]é o caminho do arquivo que você quer transformar[parameters]são os parâmetros de transformação desejados (por exemplo,h=100)
Uma URL assinada do Smart CDN é gerada seguindo estas etapas:
- Adicione o parâmetro de consulta
exppara definir um momento no futuro após o qual a assinatura não será mais aceita pelo Smart CDN. Isso é útil para limitar o acesso a um arquivo no tempo. O momento de expiração é representado pelo número de milissegundos desde a época UNIX (a meia-noite do início de 1º de janeiro de 1970, UTC). Embora esse parâmetro seja opcional, recomendamos fortemente sempre definir um momento de expiração. Por exemplo, uma assinatura comexp=1722517200000é válida até quinta-feira, 01 de agosto de 2024 às 13:00:00 GMT. - Adicione o parâmetro de consulta
auth_keypara definir a Auth Key correspondente ao Auth Secret usado para criar a assinatura. Se esse parâmetro não estiver definido, a API da Transloadit presume que o par da Auth Key mais antiga habilitada para Smart CDN foi usado na assinatura. Definir o parâmetroauth_keypermite alternar sua Auth Key sem interromper seus usuários, por isso recomendamos fortemente defini-lo. Por exemplo:auth_key=23c96d084c744219a2ce156772ec3211 - Ordene os parâmetros de consulta por chave em ordem crescente usando unidades de código UTF-16, conforme
URLSearchParams.sort(). A ordenação deve ser estável, ou seja, se uma chave aparecer várias vezes na string de consulta, os valores correspondentes devem manter sua ordem relativa. Por exemplo,h=100&f=png&f=jpg&auth_key=hello&exp=123é ordenado comoauth_key=hello&exp=123&f=png&f=jpg&h=100. - Construa a string a ser assinada concatenando os valores:
Os valores de
[your-workspace]/[template-name]/[file-path]?[sorted-parameters][your-workspace],[template-name]e[file-path]devem ser codificados para URL para garantir que contenham apenas caracteres seguros para URLs. Observe que a string não começa com uma barra. O caractere?deve ser omitido se[sorted-parameters]estiver vazio. - Calcule uma assinatura HMAC hexadecimal em conformidade com a RFC 6234 sobre a
string a ser assinada, usando seu Auth Secret como chave e SHA256 como algoritmo de hash.
Adicione ao início da assinatura hexadecimal o nome do algoritmo em letras minúsculas e dois-pontos, ou seja,
sha256:. Por exemplo, para SHA256, usesha256:[hmac-signature]. - Acrescente à URL a assinatura hexadecimal com prefixo no parâmetro de consulta
sig, obtendo a URL assinada do Smart CDN:Os valores dehttps://[your-workspace].tlcdn.com/[template-name]/[file-path]?[parameters]&sig=sha256:[hmac-signature][your-workspace],[template-name]e[file-path]devem ser codificados para URL para garantir que contenham apenas caracteres seguros para URLs. Essa URL assinada pode então ser enviada ao seu front-end ou usada nele até que a data de expiração seja atingida.
Segurança e tempo de vida do cache
As URLs assinadas do Smart CDN não são apenas um mecanismo de controle de acesso. Sua expiração também determina por quanto tempo um resultado recém-gerado pode continuar elegível para armazenamento em cache.
- Valores de
expmais próximos reduzem a janela de reutilização da solicitação e tornam o controle de acesso mais restrito. - Valores de
expmais distantes aumentam a reutilização do cache, reduzem o trabalho na origem e geralmente diminuem a latência e o volume de codificação. - Na prática, o tempo de vida efetivo do cache de uma resposta assinada do Smart CDN é limitado pelo tempo de vida restante da assinatura.
Isso significa que a relação entre os fatores é direta:
- Maior sensibilidade à segurança: use um
expmais próximo, o que também significa um TTL efetivo de cache mais curto. - Maior reutilização do cache e menor custo: use um
expmais distante, o que também significa que a URL continuará utilizável por mais tempo.
Escolha a janela de expiração de acordo com a sensibilidade do conteúdo e o quanto você deseja reutilizar o cache. Para muitos casos de uso de imagens e prévias, uma janela de expiração moderada oferece um bom equilíbrio. Para conteúdo altamente sensível, use uma janela muito mais curta.
Exemplos de código
Abaixo você encontra exemplos em diferentes linguagens para gerar URLs assinadas do Smart CDN usando nossos SDKs.
// yarn add @transloadit/node
// or
// npm install --save @transloadit/node
import { Transloadit } from '@transloadit/node'
const transloadit = new Transloadit({
authKey: 'YOUR_TRANSLOADIT_KEY',
authSecret: 'YOUR_TRANSLOADIT_SECRET',
})
const url = transloadit.getSignedSmartCDNUrl({
workspace: 'YOUR_WORKSPACE',
template: 'YOUR_TEMPLATE',
input: 'image.png',
urlParams: { height: 100, width: 100 },
})
console.log(url)
Acesso de leitura após o cancelamento
Workspaces cancelados não podem criar novos tokens bearer. Os endpoints que permitem explicitamente o acesso após o cancelamento apontam para esta receita. Use uma Auth Key ativa já existente e seu Auth Secret; a chave ainda deve conceder os escopos listados para o endpoint. Isso não restaura o acesso de escrita nem disponibiliza outros endpoints após o cancelamento.
Em um projeto Node.js confiável executado no servidor, instale o SDK com yarn add @transloadit/node.
Defina TRANSLOADIT_KEY e TRANSLOADIT_SECRET e, em seguida, defina TRANSLOADIT_URL com a URL HTTPS
completa mostrada na página do endpoint, substituindo os parâmetros de caminho pelos valores do seu recurso.
Mantenha ambas as credenciais, a URL assinada e a resposta em sigilo. Nunca execute essa configuração no código do navegador.
O SDK assina params com sha384, o padrão para novas Auth Keys, e fornece a expiração.
O exemplo adiciona um novo nonce para evitar a reutilização de assinaturas. Se sua chave usar outro algoritmo de
assinatura, passe-o como segundo argumento de calcSignature. Coloque os filtros do endpoint dentro
do objeto passado como primeiro argumento, junto com o nonce.
O SDK não chama /token nesta receita.
Salve o conteúdo a seguir como read-api.mjs e execute node read-api.mjs:
import { randomUUID } from 'node:crypto'
import { Transloadit } from '@transloadit/node'
const { TRANSLOADIT_KEY, TRANSLOADIT_SECRET, TRANSLOADIT_URL } = process.env
if (!TRANSLOADIT_KEY || !TRANSLOADIT_SECRET || !TRANSLOADIT_URL) {
throw new Error('Set TRANSLOADIT_KEY, TRANSLOADIT_SECRET, and TRANSLOADIT_URL')
}
const transloadit = new Transloadit({
authKey: TRANSLOADIT_KEY,
authSecret: TRANSLOADIT_SECRET,
})
const { params, signature } = transloadit.calcSignature({ nonce: randomUUID() })
const url = new URL(TRANSLOADIT_URL)
url.searchParams.set('params', params)
url.searchParams.set('signature', signature)
const response = await fetch(url, { redirect: 'error' })
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`)
const result = await response.json()
if (result.error) throw new Error(result.error)
console.log(JSON.stringify(result, null, 2))
Conectar um cliente MCP por URL
Clientes de agentes como ChatGPT, Codex, Claude.ai, Claude Desktop, Claude Code e Cursor se conectam
ao servidor MCP hospedado em https://api2.transloadit.com/mcp usando apenas essa URL. A API da Transloadit
é um servidor de autorização OAuth 2.1 para ele: o cliente descobre os endpoints, identifica-se,
encaminha você ao Console para fazer login e consentir e obtém um token Bearer de curta duração
para o público-alvo mcp, além de um token de atualização. Nenhum Auth Secret sai da sua conta.
- Descoberta. O servidor MCP responde a solicitações não autenticadas com
401e um cabeçalhoWWW-Authenticate: Bearer resource_metadata="https://api2.transloadit.com/.well-known/oauth-protected-resource/mcp". Esse documento da RFC 9728 indicahttps://api2.transloadit.comcomo servidor de autorização, cujos metadados da RFC 8414 emhttps://api2.transloadit.com/.well-known/oauth-authorization-serverlistam os endpoints abaixo. - Identificação do cliente. Apresente um
Documento de Metadados de ID de Cliente:
uma URL HTTPS que é o
client_ide serve JSON com o mesmoclient_id, umclient_namee osredirect_uris. Ou registre-se uma vez por meio do registro dinâmico de clientes da RFC 7591 emhttps://api2.transloadit.com/oauth/register; os clientes enviam apenas seuclient_id(token_endpoint_auth_method: "none", também quando omitido), autenticam-se com um segredo de cliente (client_secret_basicouclient_secret_post) ou autenticam-se comprivate_key_jwte umjwks_uri. A resposta contém umclient_idopaco, além de umclient_secretpara os métodos com segredo, que é exibido apenas nessa resposta. Os URIs de redirecionamento devem ser URLs HTTPS, com correspondência exata, ou URLs de loopbackhttp://localhost/http://127.0.0.1, com correspondência em qualquer porta. Um cliente registrado com um segredo o envia em todas as solicitações de token e revogação, por HTTP Basic ou comoclient_ideclient_secretno formulário. Outras solicitações de token autenticam o cliente comnoneouprivate_key_jwt, conforme listado no documento dele (emtoken_endpoint_auth_methods_supportedou, na ausência deste, emtoken_endpoint_auth_method) ou declarado no registro. A primeira solicitação de token vincula a concessão ao método usado: depois que uma solicitação para uma concessão inclui umclient_assertionda RFC 7523, todas as solicitações posteriores de token e revogação para ela também devem incluir um. Essa asserção é um JWT assinado (RS256 ou ES256) com uma chave dojwks_urido cliente, com o ID do cliente comoissesub. Seuaudé uma URL de endpoint de token configurada ou a origem dela (sem barra final) para esta implantação. Ela tem umexpdentro de cinco minutos e umjtique é aceito uma vez por cliente por região enquanto a asserção permanece válida. Use um novojtipara cada solicitação. - Consentimento. O cliente abre
https://transloadit.com/c/oauth/authorizecomresponse_type=code, seuclient_id,redirect_uri, umcode_challengePKCE (somenteS256), opcionalmentescopeestate, eresource=https://api2.transloadit.com/mcp. Você faz login, escolhe um Workspace e aprova; o Console redireciona o navegador de volta comcode, seustateeiss=https://api2.transloadit.com. O código é vinculado ao cliente, ao URI de redirecionamento, ao desafio e ao Workspace, e expira após 120 segundos. - Tokens. O cliente envia por POST
grant_type=authorization_codecomcode,code_verifier,client_ideredirect_uriparahttps://api2.transloadit.com/tokene recebe umaccess_token(válido por 604.800 segundos, 7 dias, por padrão), seuscopee umrefresh_token. Enviar por POSTgrant_type=refresh_tokencomrefresh_tokeneclient_idretorna um novo par e retira de uso o token de atualização apresentado; tokens de atualização têm validade de 30 dias, e reutilizar um token retirado de uso revoga toda a linhagem. Clientes que se autenticam com um segredo de cliente recebem de volta o mesmo token de atualização, válido por mais 30 dias a partir dessa atualização. - Revogação. Envie
token(um token de acesso ou de atualização) por POST parahttps://api2.transloadit.com/oauth/revokeconforme a RFC 7009, ou revogue a conexão no Console.
O indicador resource (RFC 8707) determina a finalidade do
token. resource=https://api2.transloadit.com/mcp (o padrão quando omitido) emite um token mcp que
contém, no máximo, os escopos seguros de MCP (assemblies:write, assemblies:read, templates:read), limitados ao que a
Auth Key do Workspace concede, e que somente o servidor MCP aceita. resource=https://api2.transloadit.com (com ou
sem barra final) emite um token api2 para aplicações que chamam a REST API diretamente,
como integrações do Vercel Connect: ele contém os
escopos solicitados limitados aos escopos da Auth Key, ou tudo o que a chave concede quando scope é
omitido, com a exceção de que uma concessão nunca inclui o gerenciamento de Auth Keys ou credenciais de Template
(auth_keys:*, template_credentials:* ou os escopos globais read/write que os implicam), portanto ela não pode
criar nem revelar credenciais duradouras. Qualquer outro resource recebe invalid_target como resposta.
Erros do protocolo OAuth no registro de clientes, na autorização e na revogação usam
o corpo padrão com error e error_description; limites de taxa podem retornar RATE_LIMIT_REACHED.
Em /token, erros de concessão OAuth para authorization_code e refresh_token usam o corpo padrão
com error e error_description. Limites de taxa retornam RATE_LIMIT_REACHED (429), e
falhas internas inesperadas retornam SERVER_500 (500). Solicitações malformadas rejeitadas
antes que a concessão seja identificada podem receber um desafio HTTP Basic (401), ou
TOKEN_INVALID_REQUEST se credenciais Basic tiverem sido fornecidas.
Tokens bearer (credenciais de cliente)
Tarefas de CI, servidores e outros clientes sem interface que possuem uma
Auth Key e um Auth Secret trocam essas credenciais por um token Bearer de curta duração
com a concessão OAuth 2.0 client_credentials, processada diretamente pela API da Transloadit. Use isso quando não houver um navegador
para dar consentimento; clientes MCP interativos devem se conectar por URL conforme descrito acima. Para a referência completa do
endpoint, consulte a documentação da API /token.
Como usar o token
Passe o token como Authorization: Bearer <access_token> nas solicitações à API. Quando uma solicitação é
autenticada com um token Bearer válido, a API2 considera a
Signature Authentication atendida e
pula a validação da assinatura. A Signature Authentication é exigida apenas em solicitações com chave/segredo.
As verificações de escopo e público-alvo continuam se aplicando. O público-alvo mcp é aceito pelo servidor MCP, que
o encaminha à API2 com uma credencial de serviço; ele é rejeitado quando apresentado diretamente aos
endpoints comuns da API2. Você pode omitir auth.key em params, mas o envelope params ainda é obrigatório
para endpoints que o esperam.
curl --fail-with-body -sS --request POST \
--url 'https://api2.transloadit.com/assemblies' \
--header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
--form 'params={"template_id":"YOUR_TEMPLATE_ID"}'
Autenticação automática de MCP para /ai/chat
Se seus Steps /ai/chat chamarem um servidor MCP hospedado pela Transloadit, a API2 poderá emitir e inserir um token
Bearer de curta duração automaticamente (autenticação automática). Isso exige ativação explícita em cada entrada de servidor MCP:
{
"mcp_servers": [
{
"type": "http",
"url": "https://api2.transloadit.com/mcp",
"auth": "transloadit"
}
]
}
Comportamento:
- Se
auth: "transloadit"estiver definido e não houver um cabeçalhoAuthorization, a API2 emitirá um token e inseriráAuthorization: Bearer <token>. - Se
Authorizationjá tiver sido fornecido emmcp_servers[].headers, ele será mantido sem alterações. - A autenticação automática só funciona por HTTPS para hosts de domínio raiz e subdomínios gerenciados pela Transloadit:
transloadit.com,*.transloadit.com,transloadit.dev,*.transloadit.dev,transloadit.website,*.transloadit.website,transloadit.work,*.transloadit.work. - A URL deve usar a porta
443e o caminho exato/mcpou um subcaminho abaixo de/mcp/. - A URL não deve conter credenciais, string de consulta ou fragmento.
- A Auth Key deve conceder pelo menos um destes escopos seguros de MCP:
assemblies:write,assemblies:read,templates:read. - O token emitido é limitado à interseção desses escopos seguros de MCP com os escopos da Auth Key; ele nunca recebe um escopo que a Auth Key não conceda.
Perguntas frequentes
A Transloadit inclui assinaturas nas solicitações que envia?
A Transloadit assina solicitações de webhook para que seu servidor possa verificar sua autenticidade. A assinatura de webhooks é separada do HMAC que autentica solicitações à API enviadas à Transloadit.
Por que não posso usar meu Auth Secret como token Bearer?
Exceto na troca de tokens entre servidores descrita acima, seu Auth Secret
nunca deve ser transmitido a um cliente nem incluído nos parâmetros de solicitações à API. POST /token o envia como
a senha HTTP Basic por HTTPS e deve ser chamado apenas pelo seu back-end. Para solicitações assinadas,
o segredo permanece no back-end e é usado como chave HMAC. Isso impede que um agente mal-intencionado
intercepte uma solicitação assinada e falsifique solicitações à sua conta. Mantenha seu Auth Secret seguro usando
o sistema de gerenciamento de segredos que preferir. Alguns exemplos são: Vault,
AWS Secrets Manager,
GCP Secret Manager e
Kubernetes Secrets, mas há muitos
outros que podem ser adequados, dependendo da plataforma de back-end escolhida.
Você deve garantir que os Auth Secrets nunca sejam incluídos como parte do front-end da sua aplicação nem expostos aos usuários.
Em que ordem as chaves do corpo precisam estar?
A ordem que você escolher para as chaves do corpo pode ser arbitrária, mas é importante observar que qualquer ordem escolhida precisa ser consistente com a geração da assinatura. O hash gerado depende do conteúdo do JSON, e uma ordenação diferente gerará um hash diferente, o que significa que sua solicitação será negada.