Oauth vs open id

644 views

Published on

temacliw

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
644
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
15
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Oauth vs open id

  1. 1. Oauth vs OpenId• Oauth • OpenIdIntroducere IntroducereFunctionalitate FunctionalitateConcluzie Concluzie Oauth vs OpenId
  2. 2. Oauth: Introducere Oauth a fost initiat in 2006 de catre Blaine Cook, care avea nevoie ca userii cuOpenId sa poata autoriza Dashboard Widgets pentru a accesa serviciul lor de latwitter. In timp a fost dezvoltat si standardizat de cei de la Google. Tot in timp au fostdezvoltate versiuni din ce in ce mai noi, incepand cu oauth 1.0a si terminand cuoauth 2.0 . Oauth este un protocol standart de autorizare, care permite utilizatorilor saisi poata arata resursele private pe care le au pe un anume site fara sa fie nevoiti saisi dezvaluie numele si parola. Acest protocol utilizeaza tokens pentru a inlocui numele si parola si are cascop autorizarea celei de a treia parti pentru a vedea datele private ale unui userfara 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 saaiba acces la datele gazduite de acestia pentru un anumit user.
  3. 3. 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;
  4. 4. Oauth: FunctionalitateImagine de la: http://oauth.net/core/1.0/#signing_process
  5. 5. 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
  6. 6. 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
  7. 7. 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:
  8. 8. 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%2 FPY%3D",• oauth_timestamp="137131200", oauth_nonce="4572616e48616d6d65724c61686176", oauth_version="1.0"• scope=http://gdata.youtube.com
  9. 9. 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 &.
  10. 10. 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.
  11. 11. Oauth: Functionalitate• Daca cererea s-a efectuat cu succes raspunsul arata in felul urmator: oauth_token=ab3cd9j4ks73hf7g&oauth_token_s ecret=ZXhhbXBsZS5jb20• Acum putem trece la autorizarea pentru request token:• https://www.google.com/accounts/OAuthAuthor izeToken?oauth_token=ab3cd9j4ks73hf7g&oauth _callback=http%3A%2F%2Fwww.example.com
  12. 12. 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=CKF50YzI HxCT85KMAg• Token este tot tokenul de adineaori.
  13. 13. 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.
  14. 14. Oauth: FunctionalitateImagine: http://code.google.com/apis/youtube/2.0/developers_guide_protocol_oauth.html
  15. 15. 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 .
  16. 16. 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.
  17. 17. OpenId: FunctionalitateImagine de la: http://code.google.com/apis/accounts/docs/OpenID.html
  18. 18. 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>{Googles login endpoint URI}</URI></Service>• In continuare o sa aratam un exemplu de cerere cu maxim timpul de sesiune de cinci minute:
  19. 19. 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
  20. 20. 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
  21. 21. 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:
  22. 22. 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.mod e,ax.type.email,ax.value.email &openid.sig=s/gfiWSVLBQcmkjvsKvbIShczH2NOisjzBLZOsfizkI= &openid.identity=https://www.google.com/accounts/o8/id/id=ACyQatixLeLODscWvwqsCXWQ2sa3 RRaBhaKTkcsvUElI6tNHIQ1_egX_wt1x3fAY983DpW4UQV_U &openid.claimed_id=https://www.google.com/accounts/o8/id/id=ACyQatixLeLODscWvwqsCXWQ2 sa3RRaBhaKTkcsvUElI6tNHIQ1_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 &openid.ax.value.email=fred.example@gmail.com &openid.ax.type.language=http://axschema.org/pref/language &openid.ax.value.language=english
  23. 23. 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.
  24. 24. 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.
  25. 25. Resurse Principalele resurse:• http://openid.net/developers/specs/• http://code.google.com/apis/youtube/2.0/developers_ guide_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

×