Newsgroup: it.comp.os.linux.sys
Titolo: oauth

Avete esperienze in merito?
Ho postato anche su ic.www.php ma alla fin fine non è un problema a livello programmazione bensì implementativo e sistemistico
 
In soldoni devo autenticare, mediante oauth (per avere uno standard riconosciuto) un utente su alcune mie applicazioni.
 
Una di queste applicazioni è distribuita con sorgente ed è a CLI quindi non posso ne utilizzare un browser per fare il redirect ad una mia pagina di login (workflow 'standard' di oauth) ne salvare una coppia di chiavi in quanto facilmente leggibili.
 
github ed heroku adottano lo stesso sistema:
tramite l'applicativo cli vengono richieste user e password e viene creato un token oauth tramite una API che esula dal normale workflow oauth.
l'applicativo di conseguenza salva il token ed usa quello per autenticare le richieste future. In pratica l'applicazione si autoaggiunge tra quelle 'trusted' del cliente, senza obbligare il cliente stesso ad aggiungere l'app nel sistema e prendersi client_id e client_secret.
 
Non capisco quale possa essere il vantaggio, oauth prevede nativamente questa modalità, tramite il workflow "Resource Owner Password Credentials Grant"
http://tools.ietf.org/html/rfc6749#section-4.3
 
per quale motivo, sia github che heroku, ne hanno duplicato la gestione?
 
Inoltre la gestione github non avrebbe comunque alcun vantaggio: l'app potrebbe benissimo venire manomessa ed inviare le credenziali al resto del mondo, essendo opensource. In tal caso, tanto valeva usare il workflow nativo di oauth.
 
Sicuramente mi sfugge qualcosa, che dite?
 
P.S: il "top" sarebbe avere una sorta di micro-browser integrato nel mio applicativo CLI, che apre una pagina in remoto con la sola form di login in formato testuale, richiedendo quindi user e pass. Non so, però, quanto possa risolvere eventuali problemi di "phishing", sarebbe difficile far capire al cliente che la form è legittima e non manomessa.

 manomessa.
 
Usi https e forzi il riconoscimento del certificato.
 
 
-- 
Flavio Visentin
 
Scientists discovered what's wrong with the female brain: on the left
side, there's nothing right, and on the right side, there's nothing left

 Usi https e forzi il riconoscimento del certificato.
 
Io devo evitare che l'applicazione (con sorgente e scaricabile dagli utenti, quindi che non gira sui miei server) possa essere manomessa per fare 2 cose alla volta:
 
1. inviare le credenziali che l'utente inserisce ad un malintenzionato
2. una volta inviate le credenziali, l'app possa fare il login regolarmente sicchè l'utente non si accorga di nulla di anomalo.
 
Pensadoci bene, questa cosa non si risolve. Anche utilizzando la login tramite browser, i dati di accesso sarebbero comunque inseriti dall'utente stesso tramite la propria postazione, quindi basterebbe alterare il browser o pizzarci in mezzo un keylogger.
 
Arrivo al punto: oAuth sconsiglia l'uso del sistema mediante scambio di credenziali per un token , perchè l'utente deve inserire user e pass su una applicazione potenzialmente compromessa o facilmente compromettibile.
La stessa cosa, però, sarebbe applicabile ad un browser, quindi non capisco quale sia il problema.
 
GitHub adotta un sistema differente (ma che mi sembra uguale): non fa lo scambio di user/pass per un token tramite il protocollo oauth, bensì utilizza user/pass mediante autenticazione di base http per creare, tramite delle loro API, un token oauth. In pratica autoinserisce l'applicazione CLI tra quelle autorizzate dal cliente, senza obbligarlo ad accedere via web, andare nelle impostazioni del profilo etc etc.
 
Cosa cambia dal sistema nativo di oauth? Mi sembra la stessa identica cosa:
l'utente comunque deve inserire le chiavi su una applicazione opensource e quindi facilmente bucabile. Che lo faccia in maneira nativa oauth o che lo faccia per richiamare una API github, cosa cambia?
 
La stessa cosa la fa Heroku, in maniera identica.
 
Esempio concreto:
 
"miaapp --user=gandalf --pass=lotr"
 
io ho già fornito le mie credenziali ad una applicazione potenzialmente compromessa.
 
a questo punto, tramite workflow oauth, otterrei un token.
github non passa per oauth, ma tramite API proprietarie e genera un token oauth.
 
cosa cambia? Niente, io ho già inserito le mie credenziali, il malintenzionato, nel caso ci fosse, farebbe quello che gli pare.