Ho l'obbligo di generare un URL monouso che dovrebbe avere le seguenti caratteristiche:
- Poiché i parametri di query dell'URL potrebbero contenere informazioni riservate, dovrebbe essere crittografato (in aggiunta a
https
encryption). - Una volta utilizzato, l'URL non può essere riutilizzato.
- Gli URL hanno una scadenza automatica dopo un determinato periodo di tempo.
- È possibile che un amministratore revochi un URL valido. Se l'utente in un momento successivo tenta di utilizzare questo URL, dovrebbe visualizzare un messaggio di errore appropriato.
Per fare questo, posso pensare a due approcci di alto livello:
- Genera un numero casuale come parametro di ricerca dell'URL. Memorizza il numero casuale ei parametri corrispondenti (ovvero i parametri di query reali, la scadenza, lo stato di revoca, lo stato utilizzato) in un database. Quando l'utente utilizza l'URL, controlla tutte le pre-condizioni richieste e contrassegnalo come usato prima di fornire i parametri di query reali.
- Incorpora i parametri di query reali e il timestamp di scadenza come parametro di query dell'URL. Cripta l'URL con un algoritmo come AES256. Tuttavia, avrei comunque bisogno di memorizzare l'URL in un database in modo da fornire la funzione di revoca.
Sulla base di quanto sopra, mi sto appoggiando all'opzione 1 in quanto tutta la logica è in un unico posto e sembra più sicura. C'è qualche buona pratica del settore per affrontare questo tipo di problema?
Se è importante, questo sarà un servizio web basato su REST ospitato su IIS.