OAuth2 è implicitamente sicuro?

2

Ho creato un server di autorizzazione utilizzando OAuth2 basato su OWIN. Capisco che la concessione implicita è fondamentalmente solo l'autenticazione di redirect_URL e Client_ID quando si effettua la richiesta. All'inizio pensavo che questo fosse l'ideale per verificare che l'utente effettuasse la richiesta poiché il server di autenticazione invierà il codice solo a quello che ha effettuato la richiesta (poiché le credenziali vengono verificate su un database) e in quanto tale, non avrebbe importanza se la chiamata è stata pubblicata sul front-end in quanto solo quell'utente potrebbe ricevere il token a causa di redirect_URL.

Poi ho capito un difetto:

Che cosa succede se qualcuno malintenzionato ha ricevuto lo script di chiamata / ajax (cosa che anticipavo comunque) e ha effettuato la chiamata attraverso un iframe sulla loro pagina .. non avrebbe davvero importanza che l'iframe venisse reindirizzato e che potessero estrarre il token direttamente da esso ?

Qualche idea?

Codice aggiunto (scusa se non è appropriato per questo canale ma volevo mostrarti come sarebbe stato raggiunto)

Ricorda che "uri" ha tutti i parametri di query all'interno.

// Build the query string (http://authserver.com?**client_id=11** etc)
            var uri = addQueryString(authorizeUri, {
                'client_id': '11',
                'redirect_uri': returnUri,
                'state': nonce,
                'scope': 'bio notes',
                'response_type': 'token',
            });

            console.log(uri);
            $('body').append('<iframe src="${uri}"/>');

            $('iframe').css({
                'display' : 'none'
            })

            $('iframe')[0].addEventListener("load", function () {
                var uriWithToken = $('iframe')[0].contentWindow.location.href;

                token = uriWithToken.split('access_token')[1].split("=")[1];
                expires = uriWithToken.split('expires_in')[1].split("=")[1];

                console.log(uriWithToken);
                console.log("TOKEN = " + token);
                console.log("EXPIRES = " + expires);
                $('iframe').remove();
            });
    
posta ravenx30 28.02.2018 - 17:43
fonte

0 risposte

Leggi altre domande sui tag