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();
});