In generale, non ci si può fidare di NIENTE dal client - questo è il problema che il link è destinato a risolvere, ma questa è una lunga strada da percorrere La cosa migliore da fare è autenticare l'utente e assicurarsi che tutte le azioni dell'utente siano autorizzate, indipendentemente dal fatto che provengano da un'app reale o da qualcuno che gioca con la tua API, tramite MITM o tramite accesso diretto.
Come le note di @Bakuriu sopra, i nonces sono valori casuali, usati una volta, sempre diversi: sono usati per prevenire attacchi di replay e come token negli schemi di prevenzione CSRF, per esempio. Quello che stai pensando è, forse, una chiave API - un valore usato per autenticare un utente (dove l'utente potrebbe essere un programma). Come dici tu, non puoi inserirlo nell'applicazione, poiché l'utente può accedervi tramite disassemblaggio, ispezione del codice sorgente o tramite ispezione del traffico di rete.
Quindi, segui la strada per non fidarti del cliente. Ciò significa che ogni utente deve essere autenticato, indipendentemente dal client utilizzato. Quindi verifichi che quell'utente abbia il permesso di fare l'azione desiderata. È possibile immettere le chiavi API per ciascun utente.
Uno schema potenziale: chiedi loro di verificare chi sono effettuando l'accesso al tuo sito web e generando per loro una chiave che possono fornire all'app: l'app può salvarla nel portachiavi dell'utente se desideri mantenerla comoda. Quando provano a eseguire un'azione, verificare la chiave API sul database. Finché questo viene fatto su canali sicuri, questo è ragionevole e utilizzato da molti servizi.
Un altro: far autenticare l'utente al tuo servizio (potenzialmente tramite Login con Facebook o qualsiasi altra cosa - oauth / openid sono buoni). Quindi verifica l'utente direttamente su ciascuna richiesta.
Entrambi hanno il vantaggio di essere facili da revocare e di limitare l'utente a ciò che è autorizzato a fare, indipendentemente dal modo in cui fanno la richiesta.
TUTTE le verifiche di autenticazione e verifica dell'autenticazione dovrebbero avvenire sul lato server, sempre. Il cliente si trova in territorio nemico e non può mai essere considerato attendibile (a corto di bruttezza del TPM).