Token protetto stateless che può scadere?

3

Voglio generare un collegamento che verrà dato a un utente. Su questo link, come parametro, aggiungerò un token che sarà valido solo per alcuni giorni. Quindi, dopo quel tempo, il server controllerà il token, vedrà che non è più valido e non consente il download.

Quello che mi piacerebbe fare è creare un token che non richieda alcun stato lato server, cioè che non mi imponga di creare una tabella con l'associazione data / data di scadenza.

Mi chiedo se ci sia un algoritmo intelligente che mi permetterebbe di farlo? In pratica un token che non può essere decodificato dopo un determinato periodo di tempo (presupponendo che l'algoritmo di decodifica sul server stia utilizzando il tempo reale, corrente,).

    
posta this.lau_ 11.04.2017 - 15:02
fonte

2 risposte

0

So after that time, the server will check the token, see that it's not valid anymore, and disallow the download

Sì, impacchetta solo alcuni dati che identificano la risorsa da scaricare con una data di scadenza e crittografala usando un algoritmo appropriato (se l'emittente del token è anche il validatore, allora un algoritmo simmetrico è OK, se sono separati corpi, quindi criptare con una chiave privata sull'emittente e decifrare con la chiave pubblica corrispondente sul validatore.

L'emittente e il validatore devono memorizzare le chiavi.

Il validatore deve anche controllare l'accesso al file scaricabile.

Assicurati di creare una rappresentazione appropriata del token (codificato) che si assorbe facilmente attraverso il sistema di posta ed è valido in un URL.

Sono circa 10 righe di codice (PHP) per l'emittente e circa 20 per il validatore.

a token that cannot be decrypted after a given time

No, impossibile.

    
risposta data 12.04.2017 - 22:09
fonte
0

È possibile utilizzare un token crittografato costituito da un numero primo e una data di scadenza. Per crittografare il token basta usare un algoritmo simmetrico come AES.

Dovresti tenere traccia di

  • La differenza tra il numero di token generati e il numero di token validati, d
  • L'ultimo numero primo generato, p
  • Il prodotto di tutti i primi generati, t

Per generare un token

  • Aumenta d
  • Calcola il prossimo primo p e restituiscilo (ciò può essere fatto in modo efficiente).

Per convalidare un token

  • Verifica che il token non sia scaduto
  • Verifica che t non sia divisibile per il numero primo

Se il token è valido

  • Moltiplica t di quel numero primo
  • Diminuisci d

In questo modo, annulli automaticamente il token in modo che non possa più essere utilizzato (la prossima volta che proverai a convalidare quel numero primo, t sarà divisibile da esso in modo che restituisca false).

Ogni volta che il numero di token validati è uguale al numero di token generati (d = 0), puoi anche reinizializzare tutte le variabili (p = 1, t = 1) in modo che la dimensione di t non cresce indefinitamente.

    
risposta data 12.04.2017 - 15:52
fonte

Leggi altre domande sui tag