veil

Registra un'app

Una persona o un proprietario dell'organizzazione firma la registrazione. Un'app confidenziale con client_secret_basic riceve il segreto una volta.

POST/v1/developer/accounts/{n}/oidc-clients
Accesso
Richiesta firmata
Client
Client locale o server

Parametri#

NomePosizioneSignificato
nObbligatorioPercorsoLa scheda che possiede le app: una persona, o un'organizzazione attraverso un proprietario accettato.

Corpo JSON#

NomePosizioneSignificato
nameObbligatorioJSONDa 1 a 60 caratteri visibili.
siteJSONURL https, al più 300 caratteri.
redirectUrisObbligatorioJSONDa 1 a 10 URI esatti: https, o http su 127.0.0.1, [::1] o localhost (qualunque porta).
postLogoutRedirectUrisJSONFino a 10 URI, stesse regole.
idTokenAlgJSONEdDSA (predefinito) o ES256.
logoJSON{type, data}: un PNG o GIF in base64 standard, al più 256 KiB e 512 px; null lo toglie.
typeObbligatorioJSONpublic (app nativa o nel browser, solo PKCE) o confidential (un server).
authMethodJSONclient_secret_basic (predefinito) o private_key_jwt, per un'app confidenziale.
jwksJSONCon private_key_jwt: da 1 a 8 chiavi pubbliche.
refreshJSONtrue (predefinito) dà i refresh token.

Questa chiamata richiede anche le intestazioni comuni di firma, nonce e timestamp. Prepara e firma request.json prima di usare l’esempio. Firma delle richieste

Esempi di richiesta#

cURL
curl -fsS -X POST \
  -H "X-Public-Key: $PUBLIC_KEY" -H "X-Signature: $REQUEST_SIGNATURE" \
  --json @request.json "https://veil.rip/v1/developer/accounts/1/oidc-clients"

Risposta#

HTTP 201application/json

201 con {client, secret}.

CampoTipoSignificato
clientOidcClientL'app.
secretstring | nullveil_secret_…, mostrato una volta; null per un'app pubblica o private_key_jwt.

Apri un oggetto annidato per leggerne i campi. I tipi con null ammettono un valore null; i campi optional possono essere assenti. Gli altri campi sono presenti nell’oggetto.

App OidcClient
CampoTipoSignificato
idstringclient_id.
namestringIl nome che la pagina di consenso mostra.
sitestring | nullIl sito https dell'app.
redirectUrisarray<string>Redirect URI esatti.
postLogoutRedirectUrisarray<string>Dove /oidc/logout può mandare il browser.
typestringpublic o confidential.
authMethodstringnone, client_secret_basic o private_key_jwt.
idTokenAlgstringEdDSA o ES256.
refreshbooleanSe l'app riceve i refresh token.
logostring | nullL'indirizzo del logo, con ?v= il suo hash.
verifiedobject | null{domain}: la scheda titolare prova il dominio del sito e di ogni redirect URI https.
ownerobject | null{n, name, type, url} della scheda titolare; null per un'app registrata senza scheda.
dynamicbooleanRegistrata con POST /oidc/register.
createdAtstringISO 8601 UTC.
expiresAtstring | nullLa fine di un'app dinamica, 30 giorni dopo la registrazione.
lastUsedAtstring | nullUltimo accesso o token.
jwksobject | nullLe chiavi pubbliche di un'app private_key_jwt.

Intestazioni della risposta#

IntestazioneValoreSignificato
Content-Typeapplication/jsonJSON, anche per gli errori.
Cache-Controlno-storePrivata: mai in una cache.

Note d’uso#

  • Al più 512 KiB, per il logo. I campi sconosciuti si rifiutano.

Errori#

Gli errori API restituiscono un oggetto error. Usa error.code nella logica del programma; error.message è un testo inglese per le persone e può cambiare. Guida a risposte ed errori

HTTPCodiceSignificato e cosa fare
400invalid_json

Il corpo non è un oggetto JSON, contiene chiavi duplicate o dati finali.

Invia un solo oggetto JSON valido con Content-Type application/json.

400invalid_parameter

Un campo del percorso, della query o del corpo manca, è malformato o fuori intervallo.

Correggi il campo indicato in error.message prima di inviare di nuovo.

403identity_banned

La scheda che agisce è sospesa dallo staff di Veil.

Attendi la fine della restrizione o chiedi allo staff di riesaminarla.

403key_mismatch

La chiave di firma non è autorizzata per questa scheda o operazione.

Usa una chiave di dispositivo attiva con il ruolo di titolare o membro richiesto.

404not_found

La scheda, la chiave, l’alias, il codice o la risorsa richiesti non sono stati trovati.

Controlla l’identificatore. Codici e anteprime temporanei potrebbero essere scaduti o già usati.

409oidc_client_limit

La scheda ha già 20 app.

Cancella un'app prima di registrarne un'altra.

413payload_too_large

Il corpo della richiesta supera il limite in byte dell’endpoint.

Riduci il corpo codificato. La gestione delle chiavi API ammette al massimo 8 KiB.

422invalid_client_metadata

Un campo dell'app su /developers manca o non è ammesso.

Correggi il campo indicato in error.message.

422invalid_redirect_uri

Un redirect URI su /developers non è https, o è http fuori dall'interfaccia di loopback.

Correggi l'URI indicato in error.message.

Errori comuni delle richieste
HTTPCodiceSignificato e cosa fare
400invalid_nonce

Il nonce della richiesta firmata ha un formato errato.

Genera un nuovo nonce da 16 a 128 caratteri usando lettere, cifre, _ o -.

400invalid_signature_alg

X-Signature-Alg non è supportato.

Usa un algoritmo di firma supportato e la codifica corretta per chiave e firma.

400invalid_timestamp

Il timestamp della richiesta firmata non è espresso in millisecondi Unix.

Usa un timestamp Unix intero in millisecondi e firma la richiesta corretta.

401invalid_signature

La firma della richiesta HTTP non è valida.

Firma metodo, percorso e byte del corpo esatti, senza modificarli dopo.

401missing_signature

La richiesta richiede una firma del dispositivo e le intestazioni mancano o non sono leggibili.

Invia X-Public-Key, X-Signature e i metadati della richiesta firmata. Una chiave API non sostituisce la firma del dispositivo.

401stale_timestamp

Il timestamp firmato è fuori dalla finestra temporale ammessa.

Confronta l’intestazione Date del server con il tuo orologio, poi genera nuovi nonce, timestamp e firma.

403key_banned

La chiave del dispositivo che firma è sospesa dallo staff di Veil.

Usa una chiave attiva autorizzata o chiedi allo staff di riesaminare la restrizione.

409replayed_nonce

La chiave di firma ha già usato questo nonce.

Controlla se la richiesta precedente è riuscita prima di crearne una nuova firmata.

429rate_limited

È stato superato un limite anonimo, delle richieste firmate o della chiave API.

Attendi almeno i secondi indicati da Retry-After. Condividi coda e budget dei tentativi tra i tuoi processi.

500internal_error

Si è verificato un errore imprevisto del server. I dettagli interni non vengono restituiti.

Riprova le letture con attese crescenti e un limite. Controlla l’esito delle scritture prima di inviare una nuova operazione firmata.

503busy

L’applicazione ha raggiunto un limite temporaneo di concorrenza o del database.

Attendi i secondi indicati da Retry-After e riprova con attese crescenti e un limite.