oauth vs open id

25
Oauth vs OpenId • OpenId Introducere Functionalitat e Concluzie • Oauth Introducere Functionalit ate Concluzie Oauth vs OpenId

Upload: sorinm10

Post on 24-May-2015

553 views

Category:

Documents


5 download

DESCRIPTION

temacliw

TRANSCRIPT

Page 1: Oauth vs open id

Oauth vs OpenId

• OpenIdIntroducereFunctionalitateConcluzie

• OauthIntroducereFunctionalitateConcluzie

Oauth vs OpenId

Page 2: Oauth vs open id

Oauth: Introducere Oauth a fost initiat in 2006 de catre Blaine Cook, care avea nevoie ca userii cu

OpenId sa poata autoriza Dashboard Widgets pentru a accesa serviciul lor de la twitter.

In timp a fost dezvoltat si standardizat de cei de la Google. Tot in timp au fost dezvoltate versiuni din ce in ce mai noi, incepand cu oauth 1.0a si terminand cu oauth 2.0 .

Oauth este un protocol standart de autorizare, care permite utilizatorilor sa isi poata arata resursele private pe care le au pe un anume site fara sa fie nevoiti sa isi dezvaluie numele si parola.

Acest protocol utilizeaza tokens pentru a inlocui numele si parola si are ca scop autorizarea celei de a treia parti pentru a vedea datele private ale unui user fara ca userul sa isi ofere numele si parola pe care le are .

Acest protocol este folosit pentru autorizare in principal de serviciile web (exemplu: Facebook, Twitter, Google, etc) pentru a autoriza cea de a treia parte sa aiba acces la datele gazduite de acestia pentru un anumit user.

Page 3: Oauth vs open id

Oauth: Functionalitate

• In oauth este vorba de trei parti:User care detine date gazduite de un anume

serviciu si doreste sa autorizeze o anume aplicatie sa poata accesa datale sale gazduite pe acel serviciu;

Serviciu web este locul unde userul are gazduite anumite date;

Consumer este cea de a treia parte pe care userul vrea sa o autorizeze;

Page 4: Oauth vs open id

Oauth: Functionalitate

Imagine de la: http://oauth.net/core/1.0/#signing_process

Page 5: Oauth vs open id

Oauth: Functionalitate

• In aceasta comunicare dintre user, consumer, si service provider are trei parti:

Partea in care consumer face o cerere la service provider pentru un request token;

Partea in care consumer il redirecteaza la service provider pe user pentru a il autoriza;

Partea in care consumer face schimbul unui request token pentru un access token

Page 6: Oauth vs open id

Oauth: Functionalitate

• Intai ca consumer avem nevoie de un consumer key pe care il obtinem inregistrand aplicatia noastra la service provider.

• Acum putem face cererea la service provider pentru un request token.

• In aceasta cerere parametri pot fi trimisi in trei moduri:

-ca http authorization header -ca http post -ca parte de url

Page 7: Oauth vs open id

Oauth: Functionalitate

• Acum descriem protocolul Oauth 1.0 pentru cazul youtube(care face cu google):

• Trebuie sa mentionam ca google suporta RSA-SHA1 si HMAC-SHA1 ca protocoale de semnare sau putem sa avem plaintext in cas ca folosim un canal SSL.

• Dupa cum spuneam ca prim pas avem nevoie de request token si cererea arata in felul urmator:

Page 8: Oauth vs open id

Oauth: Functionalitate

• POST /accounts/OAuthGetRequestToken HTTP/1.1 • Host: https://www.google.com • Content-Type: application/x-www-form-urlencoded

Authorization: OAuth oauth_consumer_key="msczhOK936UrGhyCAn_Dfg", oauth_signature_method="RSA-SHA1", oauth_signature="wOJIO9A2W5mFwDgiDvZbTSMK%2FPY%3D",

• oauth_timestamp="137131200", oauth_nonce="4572616e48616d6d65724c61686176", oauth_version="1.0"

• scope=http://gdata.youtube.com

Page 9: Oauth vs open id

Oauth: Functionalitate

• Parametri sunt trimisi prin post din acesta cauza avem urlencoded.

• Consumer-key este cheia oferita de google in urma inregistrarii aplicatiei (aceasta cheie o vom folosi in fiecare cerere de acum incolo).

• Signature-method este tipul de semnatura, unul din cele doua enumerate adineaori.

• Signature este semnatura acestui request folosind metoda specificata mai sus. Fiecare parametru este semnat in felul urmator:sunt sortati dupa nume iar daca numele e egal sunt sortati dupa valoare, numele e separat de valoare prin =, iar parametri intre ei prin &.

Page 10: Oauth vs open id

Oauth: Functionalitate

• Timestamp specifica timpul cand a fost trimis acest request( numarul de secunde dupa 1 Ianuarie, 1970 00:00:00 GMT);

• Nonce este un random 64 bit numar encodat ca ascii in forma decimala si este unic la fel ca timestamp;

• Version este versiunea utilizata de oauth care poate fi 1.0 sau 2.0;

• Scope este serviciul pe care il apelezi.

Page 11: Oauth vs open id

Oauth: Functionalitate

• Daca cererea s-a efectuat cu succes raspunsul arata in felul urmator: oauth_token=ab3cd9j4ks73hf7g&oauth_token_secret=ZXhhbXBsZS5jb20

• Acum putem trece la autorizarea pentru request token:

• https://www.google.com/accounts/OAuthAuthorizeToken?oauth_token=ab3cd9j4ks73hf7g&oauth_callback=http%3A%2F%2Fwww.example.com

Page 12: Oauth vs open id

Oauth: Functionalitate

• Acest url la care il redirectam pe user contine 2 parametri tokenul primit si callback care este url-ul unde userul va fi redirectat in caz ca acesta autorizeaza accesul.

• Acum userul este redirectat la youtube pe pagina de login in caz ca nu este deja logat si dupa ce se logheaza ii va aparea o fereastra in care este intrebat daca permite accesul aplicatiei noastre la datele sale si care este nivelul de acces, iar in caz ca permite va fi redirectat la callback specificat care are forma urmatoare:

http://www.example.com/ytapi.html?oauth_token=CKF50YzIHxCT85KMAg• Token este tot tokenul de adineaori.

Page 13: Oauth vs open id

Oauth: Functionalitate

• Acum putem face cererea pentru access token care are aceiasi parametri ca si cererea pentru request token doar ca in plus are si request token.

• Raspunsul in caz de succes va avea forma:oauth_token=ab3cd9j4ks73hf7g&oauth_token_secr

et=ZXhhbXBsZS5jb20.• Acum detinem acces token si putem face cereri

pentru datele cu care vrem sa operam.• Autorizarea e completa.

Page 14: Oauth vs open id

Oauth: Functionalitate

Imagine: http://code.google.com/apis/youtube/2.0/developers_guide_protocol_oauth.html

Page 15: Oauth vs open id

Oauth:Concluzie• Oauth la vremea actuala este cel mai folosit protocol de autorizaresi

continua sa se dezvolte fiind folosit intens de servicii ca Facebook, Twitter, Youtube.

• Oauth, deoarece foloseste tokens face ca totul sa fie usor si bine securizat.• Ca source cod pentru oauth php putem gasi la adresa :

http://code.google.com/p/oauth-php/downloads/detail?name=oauth-php-175.tar.gz&can=2&q= atat pentru google exemplu cat si pentru twitter.

• Tot cod sursa se poate gasi si la:http://oauth.googlecode.com/svn/code/php/ iar atat biblioteci cat si cod sursa (un exemplu testat personal) se poate

gasi atat la http://oauth.net/code/ la varianta php este un exemplu simplu cat si walkthrough, cat si la https://github.com/willnorris/oauth-php http://apiwiki.justin.tv/mediawiki/index.php/OAuth_PHP_Tutorial .

Page 16: Oauth vs open id

OpenId: Introducere• OpenId descrie modul de comunicare pentru ca un user sa se autentifice

la o aplicatie cu contul pe care il are la un anume serviciu web fara sa fie nevoit sa ofere parola pe care o detine altei aplicatii decat celei unde are deja un cont.

• Acest lucru ajuta userul ca sa nu fie nevoit sa isi faca mai multe conturi si sa tina minte mai multe parole.

• Daca aplicatia unde vrea sa se autentifice foloseste OpenId-ul serviciului web unde userul are deja cont atunci userul nu mai este nevoit sa isi faca un nou cont pentru a putea face anumite cereri in acea aplicatie.

• De obicei un identificator OpenId arata in felul urmator: numeuser.numedomeniu unde nume domeniu sa zicem ca poate fi

blogspot.com.• OpenId a fost implementat in May 2005 de catre Brad Fitzpatrick denumit

pentru prima data YADIS.

Page 17: Oauth vs open id

OpenId: Functionalitate

Imagine de la: http://code.google.com/apis/accounts/docs/OpenID.html

Page 18: Oauth vs open id

OpenId: Functionalitate

• Pentru a face rost de un openId endpoint trebuie sa facem o cerere get la adresa:

https://www.google.com/accounts/o8/id iar google uri endpoint returnat o sa aiba urmatorul format:

<Service priority="0"> <Type>http://specs.openid.net/auth/2.0/server

</Type> <URI>{Google's login endpoint URI}</URI> </Service>• In continuare o sa aratam un exemplu de cerere cu

maxim timpul de sesiune de cinci minute:

Page 19: Oauth vs open id

OpenId: Functionalitate• https://www.google.com/accounts/o8/id

?openid.ns=http://specs.openid.net/auth/2.0 &openid.ns.pape=http://specs.openid.net/extensions/pape/1.0 &openid.ns.max_auth_age=300 &openid.claimed_id=http://specs.openid.net/auth/2.0/identifier_select &openid.identity=http://specs.openid.net/auth/2.0/identifier_select &openid.return_to=http://www.example.com/checkauth &openid.realm=http://www.example.com/ &openid.assoc_handle=ABSmpf6DNMw &openid.mode=checkid_setup &openid.ui.ns=http://specs.openid.net/extensions/ui/1.0 &openid.ui.mode=popup &openid.ui.icon=true &openid.ns.ax=http://openid.net/srv/ax/1.0 &openid.ax.mode=fetch_request &openid.ax.type.email=http://axschema.org/contact/email &openid.ax.type.language=http://axschema.org/pref/language &openid.ax.required=email,language

Page 20: Oauth vs open id

OpenId: Functionalitate

• openid.ns = identifica versiunea protocolului OpenID care se foloseste. Aceasta valoarea trebuie sa fie: "http://specs.openid.net/auth/2.0".

• openid.claimed_id = identificator optional pentru cerere. Valoarea lui trebuie setata cu: "http://specs.openid.net/auth/2.0/identifier_select".

• openid.identity este optional;• openid.return_to=indica url-ul unde userul trebuie returnat

dupa logare;• Openin.mode=modul de interactiune cu userul : daca este

permis sau nu;• openid.ns.ui=pagina de autentificare va aparea separat

Page 21: Oauth vs open id

OpenId: Functionalitate

• openid.ns.ax=cererea pentru informatiile despre user;

• openid.ax.required=specifica atributul care este cerut spre exemplu email, nume.

• Restul parametrilor care nu sunt explicatiinseamna ca sunt optionali.

• In continuare o sa aratam cum o sa aiba formatul raspunsul in caz de succes avand in vedere ca in cerere am avut inclus si timpul de autentificare, email si limba:

Page 22: Oauth vs open id

OpenId: Functionalitate• http://www.example.com/8080/checkauth ?openid.ns=http://specs.openid.net/auth/2.0

&openid.mode=id_res &openid.op_endpoint=https://www.google.com/accounts/o8/ud &openid.response_nonce=2008-09-18T04:14:41Zt6shNlcz-MBdaw &openid.return_to=http://www.example.com:8080/checkauth &openid.assoc_handle=ABSmpf6DNMw &openid.ns.pape=http://specs.openid.net/extensions/pape/1.0 &openid.pape.auth_time=2005-05-15T17:11:51Z &openid.pape.auth_policies=http://schemas.openid.net/pape/policies/2007/06/none &openid.signed=op_endpoint,claimed_id,identity,return_to,response_nonce,assoc_handle,ax.mode,ax.type.email,ax.value.email &openid.sig=s/gfiWSVLBQcmkjvsKvbIShczH2NOisjzBLZOsfizkI= &openid.identity=https://www.google.com/accounts/o8/id/id=ACyQatixLeLODscWvwqsCXWQ2sa3RRaBhaKTkcsvUElI6tNHIQ1_egX_wt1x3fAY983DpW4UQV_U &openid.claimed_id=https://www.google.com/accounts/o8/id/id=ACyQatixLeLODscWvwqsCXWQ2sa3RRaBhaKTkcsvUElI6tNHIQ1_egX_wt1x3fAY983DpW4UQV_U &openid.ns.ax=http://openid.net/srv/ax/1.0

• &openid.ax.mode=fetch_response • &openid.ax.type.email=http://axschema.org/contact/email

&[email protected] &openid.ax.type.language=http://axschema.org/pref/language &openid.ax.value.language=english

Page 23: Oauth vs open id

OpenId:Concluzie

• Ca source code am descarcat ultima versiune de Zend si am instalat-o iar in folderul demos avem un exemplu simplu de autentificare cu OpenId. Ultima versiune de Zend se poate gasi la adresa: http://www.zend.com/en/community/downloads este zend framework 1.11.

• Ca instructiuni de instalare puteti sa le urmati pe cele de la adresa: http://www.lametadesign.com/blog/admin/how-install-zend-framework-using-wamp-20-windows-xp in caz ca aveti wamp.

Page 24: Oauth vs open id

Oauth vs OpenId

• Daca in oauth este vorba despre accesarea resurselor pe care le detine identitatea in openId este vorba despre accesarea indentitatii;

• Daca openId este decentralizat, oauth este centralizat;

• Daca openId utilizeaza protocolul Diffie Helman pentru schimbarea cheii, oauth utilizeaza una din semnaturile RSA-SHA1 sau HMAC-SHA1;

• In ambele este vorba de trei parti participante;• Putem spune ca oauth completeaza openId.

Page 25: Oauth vs open id

Resurse

Principalele resurse:• http://openid.net/developers/specs/• http://code.google.com/apis/youtube/2.0/developers_g

uide_protocol_oauth.html• Wikipedia• http://googlecodesamples.com/oauth_playground/• Zend Framework• http://oauth.net/core/1.0/#anchor14 • http://code.google.com/apis/accounts/docs/OpenID.ht

ml

• http://oauth.net/core/1.0/#signing_process