Vai al contenuto
PuraPura Developers

SDK in abbonamento

OAuth per utente · limiti del piano condivisi tra le app · modello gestito da Pura.

Cerchi le API a consumo?
Developers/Token, refresh e concorrenza

Token, refresh e concorrenza

Storage cifrato per utente e rotazione sicura su più worker.

Durata e rotazione

Access token: quindici minuti. Refresh token: trenta giorni. Ogni refresh sostituisce access e refresh token; salva la nuova coppia prima di continuare. Riutilizzare un refresh token già ruotato revoca la sua famiglia di token.

TokenStore

Implementa get e set su un record associato a utente locale, app e identità Pura verificata. Cifra i token a riposo con una chiave nel tuo secret store. Il record deve essere accessibile solo al backend che gestisce quella sessione; una connessione cancellata restituisce null/None.

typescript
import type {TokenStore, StoredTokens} from '@pura-ai/sdk';

// DB reads/writes must use the lock's transaction context.
const store: TokenStore = {
  get: async (): Promise<StoredTokens | null> => loadEncryptedGrant(),
  set: async tokens => saveEncryptedGrant(tokens),
  withRefreshLock: operation => withGrantDatabaseLock(operation),
};

Più processi e worker

Un’istanza SDK coordina i propri refresh concorrenti. Per più istanze implementa withRefreshLock(operation) in TypeScript o with_refresh_lock() in Python con un lock condiviso relativo allo stesso grant. La lettura, il refresh e il salvataggio devono avvenire nello stesso contesto transazionale.

Sotto il lock l’SDK rilegge i token: se un altro worker ha già ruotato usa la nuova coppia. Rilascia il lock anche quando la funzione fallisce. Un lock globale per tutti gli utenti crea colli di bottiglia e non sostituisce l’associazione corretta della sessione.

Revoca e identità incoerente

invalid_grant o una variazione del pura_user_id durante il refresh interrompono il collegamento. L’SDK non salva token appartenenti a un’identità diversa. Richiedi una nuova autorizzazione e cancella i token non validi; non tentare refresh in ciclo.