1.What is the difference between authentication and authorization?
Authentication è il processo tramite il quale un server controlla se un utente è effettivamente l'utente che dichiara di essere. Questo di solito viene fatto, quando l'utente fornisce il nome utente e una password, mentre il server controlla queste credenziali (nome utente, password) con quelle memorizzate nel suo database, quando il primo utente ha creato il suo account.
Autorizzazione si verifica quando un'entità fornisce l'autorizzazione a un'altra entità per eseguire un'azione. In questo caso, ad esempio, è quando un sito desidera accedere ai dati di un utente, che sono memorizzati e di proprietà in un sito Web diverso.
2.What is OAuth2 meant to do?
Ufficialmente, OAuth2 consente a un utente di consentire a un sito Web del cliente C di accedere ai propri dati da un sito Web del server delle risorse RS dopo l'autenticazione tramite un sito Web del server di autenticazione AS. Questo sembra abbastanza complesso, quindi per semplificare, un esempio comune è quando un utente accede a un sito Web usando il suo account Facebook. In tal caso, il sito Web del cliente e il sito Web del server delle risorse sono gli stessi (C = RS = il sito Web visitato) e il server di autenticazione è Facebook (AS = facebook). Si noti che questo è stato creato, in modo che la C, RS non impari la password dell'utente, pur essendo in grado di autenticarlo.
3.WhyisOAuth2implicitflowinsecureforauthenticationwhilestillsecureforauthorization?
Laspecificitàconilflussoimplicitoèilfattocheiltokendiaccessoèdatoallouser-agentperinoltrareall'applicazione.Quindi,sibasaesclusivamentesull'URIdireindirizzamento.Pertanto,questoflussononautentical'identitàdell'applicazione,poichénonvièalcunariservatezzasegretadelclient(tokendiaccessoespostoall'utenteeapplicazioniinesecuzioneneldispositivomobile)
4.WhatisthedifferencebetweenOAuth2implicitflowandOauth2authenticationcodeflowandwhentousewhich?
Comedescrittoinprecedenza,nelflussoimplicitoiltokendiaccessovieneinoltratoall'applicazionedall'agenteutente.D'altraparte,nelflussodelcodicediautorizzazione,ilserverwebdelclientottieneprimauncodicediautorizzazione(dopocheilproprietario/utentedellarisorsahadatol'accesso),quindieffettuaunachiamataall'APIpassando(clientID,secretID)conilcodicediautorizzazioneperottenereiltokendiaccesso.Questoèfatto,cosìcheincasodiconnessioniHTTP(senzacrittografiaSSL),iltokendiaccessononèaccessibileaman-in-the-middle(router,proxy,ecc.).Quindi,ilprimoèadattoperleapplicazionimobili,mentreilsecondoèadattoperleapplicazionilatoserver.
5.DoesOAuth2authenticationcodeflowworkforauthentication?
Sì,ilflussodelcodicediautorizzazioneautenticaanchel'utentetramiteilserverdiautenticazione.
6.ShouldyouuseOpenIDinsteadofOAuth2forauthentication?
Sì.
OpenIDvieneutilizzatoperl'autenticazione.UnesempioèquandovogliamochegliutentipossanoaccedereinpiùsitiWebconunsingolosetdicredenziali(sign-sign-on).
OAuthvieneutilizzatoperl'autorizzazione,comedescrittoinprecedenza.SinoticheOAuthpuòessereleggermenteregolato(comenell'esempioprecedente,doveC=RS)pereseguire(pseudo-)l'autenticazione,tramiteautorizzazione.Ma,sevogliamosolol'autenticazione,possiamousareOpenID.
7.Whyisgooglesayingthattheir"OAuth2" framework can be used for both authentication and authorization.
Credo che le vere ragioni alla base di questa decisione progettuale possano essere date solo dai corrispondenti ingegneri di Google, ma potrei supporre che invece di usare sia OpenID che OAuth, hanno scelto di utilizzare un singolo protocollo per entrambi gli usi, al fine di semplificare cose. Tuttavia, sii consapevole del fatto che l'autenticazione tramite OAuth viene eseguita autentificando qualcuno, attraverso i dati che possiede. Un esempio noioso sarebbe che quando sto cercando di entrare nel mio edificio di lavoro, non mi chiedono le mie credenziali, perché la mia carta dei dipendenti è ovviamente nel mio collo. In questo modo l'autenticazione viene eseguita tramite OAuth, abbastanza semplificata. Quindi, puoi vedere che questo può fare diverse assunzioni che non sempre si tengono in ogni scenario. E questo è il motivo per cui in genere si consiglia di utilizzare OAuth solo per l'autorizzazione e utilizzare OpenID, nel caso in cui sia necessario implementare l'autenticazione.
Un link piacevole che descrive i vari flussi di OAuth per reference