In the question, substitute
scope
withstate
. Since there is an answer based on the wrong question, I'll let everything below as is. The answer is useful nonetheless.
Questa domanda si riferisce alla bozza corrente v30 di OAuth2 e GitHub's implementazione dello stesso.
Il "flusso di applicazioni Web" di GitHub è più o meno un'implementazione di Codice di autorizzazione Concedi come descritto nella specifica. Il client (l'applicazione Web) indirizza l'utente a una pagina speciale su GitHub che chiede se l'utente vuole consentire all'applicazione di accedere alle sue risorse. Se viene confermato, l'utente viene reindirizzato al client che quindi utilizza un codice temporaneo per recuperare il token OAuth per un utilizzo futuro.
Se il client ha fornito un parametro scope
per la richiesta dell'utente a GitHub, anche il reindirizzamento contiene quel parametro. Se l'ambito è un segreto noto solo al client, il client può essere certo che nessun altro ha creato tale richiesta, cioè che l'utente non è stato vittima di un attacco CSRF.
Ma è davvero necessario?
Se scegliamo non per utilizzare un parametro scope
e l'utente è effettivamente vittima di un attacco CSRF, lui o lei deve ancora accettare la domanda posta da GitHub se il client è autorizzato ad accedere alle informazioni dell'utente. Questo passaggio non può essere saltato. In effetti le specifiche dicono
[The] authorization server authenticates the resource owner and obtains an authorization decision (by asking the resource owner or by establishing approval via other means).
Se l'attaccante usa altre tecniche come il clickjacking per indurre l'utente ad accettare la richiesta, ritengo che tutte le scommesse siano comunque in ogni caso e l'oscilloscopio non proteggerà nemmeno l'utente.
In conclusione: contro quale minaccia l'ambito effettivamente protegge l'utente?