Sto implementando il lato client OAuth e sono preoccupato per il seguente scenario.
C'è un'applicazione A registrata con il servizio B che offre accesso alle sue risorse utente - autorizzata da OAuth (Confidential, Authorization code flow).
Ora c'è un utente malintenzionato X che si registrerà all'applicazione A e acquisirà il reindirizzamento OAuth iniziale, operazione banale da eseguire quando utilizza il browser Xs.
Se riesce a ottenere qualche utente Bs (chiamiamolo C) per aprire il collegamento, B mostrerà che A sta chiedendo l'accesso. Se A è un nome noto, c'è una possibilità che l'utente approverà l'accesso.
Ora il server di autorizzazione Bs sta reindirizzando l'utente su A e A recupererà il token di accesso e potrebbe utilizzarlo per accedere alle risorse C.
Ecco la cosa che mi preoccupa - se A sta usando state
per identificare il processo di autorizzazione, saprà che la richiesta è stata avviata da X. Se non autentica separatamente l'utente C, allora collegherà le risorse C a Account X.
Questa è una preoccupazione valida? O c'è qualcosa in OAuth che impedisce tale attacco?
È giusto dire - 'se il client OAuth ha i propri utenti DEVE autenticarli quando si esegue la richiamata della risposta di autorizzazione - e non può fare affidamento sul parametro state
a tale scopo'?
Esistono ulteriori attenuazioni da applicare? Ad esempio, limitando la velocità con cui X può avviare il processo OAuth - nel caso in cui stia tentando di fornire più collegamenti a più target nella speranza che qualcuno cada per questo? Limite di tempo per il quale è stato dato il state
valido? Altro?