Vai al contenuto

Autenticazione

Autenticazione

Una chiave segreta nell'intestazione Authorization è la via d'accesso ai Suoi dati. Non esiste altra via d'ingresso e nessuna richiesta viene mai autenticata da un cookie di sessione. Gli endpoint di categoria fanno eccezione: descrivono i campi che chiediamo, non i dati di nessuno, e rispondono senza chiave.

Chiavi

Una chiave viene mostrata una sola volta, nel momento in cui viene creata. La conservi dove i server possono leggerla e un browser no.

  • pc_sk_live_…
  • pc_sk_test_…

Prova e produzione restano separate

Il modo è iscritto nella credenziale stessa anziché passato come parametro, perciò una chiave di prova non può né leggere né modificare i Suoi passaporti reali. Una richiesta mal indirizzata fallisce invece di raggiungere il catalogo sbagliato. I passaporti di prova vengono eliminati 90 giorni dopo l'ultima modifica del passaporto stesso.

Inviare la chiave

Autenticazione Bearer su HTTPS. Nient'altro viene accettato, e una richiesta priva dell'intestazione viene rifiutata prima di raggiungere un qualsiasi Suo record.

Richiesta
curl "https://passportcraft.com/api/v1/whoami" \
  -H "Authorization: Bearer pc_sk_live_…"

Le credenziali nel browser non sono supportate, e non lo sono per scelta. Una chiave vive su un server; una chiave nel codice front-end è una chiave già pubblicata.

Ambiti

Una chiave porta un insieme fisso di ambiti, scelto al momento della creazione. Una richiesta priva dell'ambito richiesto dal proprio endpoint viene rifiutata, e il rifiuto nomina il permesso mancante.

Nessun ambito richiesto

Basta una credenziale valida. Questi endpoint non restituiscono nulla che appartenga a una singola organizzazione.

Nessuna credenziale richiesta

Leggibile senza chiave. Questi endpoint descrivono il prodotto stesso — quali categorie esistono e quali campi chiede ciascuna — quindi la risposta è la stessa per chiunque legga. Una chiave viene comunque accettata, e una chiave revocata o scaduta viene comunque rifiutata. Senza chiave si viene misurati sul contatore anonimo di 60 richieste al minuto per indirizzo client.

Una sola chiave per più organizzazioni

Una chiave appartiene a un'organizzazione e può agire su un'altra organizzazione solo dove dispone di una concessione. Un'organizzazione che gestisce clienti può concedere alle proprie chiavi l'accesso a ciascun cliente, con permessi scelti per ogni cliente. Ogni richiesta indica un'organizzazione nel proprio percorso e agisce solo su quell'organizzazione.

Dare a una chiave l'accesso a un cliente

Richiami POST /organizations/{organization}/grants con l'identificativo del cliente nel percorso, e il key_id della chiave e gli ambiti da concedere nel corpo. La chiave usata per la chiamata deve disporre di keys:admin nella propria organizzazione. A un cliente possono essere concessi solo ambiti che la chiave possiede già nella propria organizzazione, e filings:write richiede inoltre che l'autorizzazione scritta del cliente sia prima confermata.

Richiesta
curl "https://passportcraft.com/api/v1/organizations/{client}/grants" \
  -X POST \
  -H "Authorization: Bearer $PASSPORTCRAFT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"key_id": "K3n9Qw2P", "scopes": ["passports:read", "passports:write"]}'

Quando l'accesso termina

DELETE /organizations/{organization}/grants/{keyId} pone fine a una concessione, e la chiave continua a funzionare su ogni altra organizzazione su cui dispone di una concessione. Un cliente può anche rimuovere l'accesso di una chiave dalle proprie impostazioni. Porre fine alla collaborazione fra un cliente e la Sua organizzazione pone fine in un colpo solo a tutte le concessioni su quel cliente. Da quel momento, ogni richiesta per il cliente riceve come risposta 404 organization_not_found_or_not_granted, la stessa risposta prevista per un'organizzazione inesistente. Per distinguere i due casi, richiami GET /organizations: un'organizzazione di cui ha perso l'accesso non compare più nell'elenco.

Ogni voce di GET /organizations riporta display_name, il nome dell'organizzazione, e link_status, che vale "accepted" per un cliente gestito dalla Sua organizzazione e null per la Sua stessa organizzazione.

Chiavi live per un'organizzazione che gestisce clienti

Un'organizzazione che gestisce clienti può creare una chiave live quando il proprio piano, o il piano di almeno uno dei propri clienti, è un piano Pro o Scale a pagamento. Un piano in prova, o con un pagamento in arretrato, non conta. Ogni richiesta viene comunque verificata rispetto al piano dell'organizzazione indicata nel percorso.

Esempio: un pianificatore, dieci clienti

Un job notturno richiama GET /organizations per elencare le organizzazioni su cui la propria chiave può agire, poi sincronizza ogni cliente separatamente. Un cliente che se ne va esce dall'elenco, così il job smette di richiamarlo invece di registrare un 404 ogni notte.

Richiesta
const base = 'https://passportcraft.com/api/v1'
const headers = { 'Authorization': 'Bearer ' + process.env.PASSPORTCRAFT_API_KEY }

const { data } = await (await fetch(base + '/organizations', { headers })).json()
const clients = data.filter((connection) => connection.link_status === 'accepted')

for (const client of clients) {
  // One organization per request, always named in the path.
  await syncCatalogue(client.organization_id, client.display_name)
}