SlideShare a Scribd company logo
1 of 26
Download to read offline
OAuth 2.0

#ZFMeetup, 9. únor 2012
Ondřej Machulda
ondrej.machulda@gmail.com
http://o.vlastovka.eu
   @OndraM
OAuth – WTF

●
    Open Authorization
●   „Otevřený standard pro autorizaci“
●
    Autorizace vs. autentizace
       –   autentizace – kdo jsem (identita)
       –   autorizace – co můžu (přístup k prostředkům)
●
    Sdílení dat mezi službami (API)
●   Vznik nedávno (1.0 v roce 2006/7)
●
    OAuth 2.0, draft #23
●   Zend_Oauth
                                                          2
OAuth 2.0 – WHO




                  3
OAuth 2.0 – WHO




                  4
OAuth 2.0 - možnosti

●
    Client side („Implicit grant“)
    ●
        Zjednodušené, pro client-only aplikace (AJAX)
●
    Server side („ Authorization Code Grant“)
    ●
        Consumer (client)
        –   naše app, chce data uživatele uložena u providera
    ●
        Uživatel
        –   má data u providera, chce povolit přístup k nim
            consumerovi
    ●
        Provider (resource server)
        –   poskytuje API pro přístup k datům uživatelů
                                                                5
OAuth 2.0 – jak na to

●
    Registrace „OAuth consumera“ u providera
    ●   callback url
    ●   client_id, client_secret
    ●   captcha
    ●
        Např.:
        –   https://developers.facebook.com/apps
        –   https://foursquare.com/oauth/register
        –   https://dev.twitter.com/apps/new



                                                    6
OAuth 2.0 – jak na to

●
    Registrace „OAuth consumera“ u providera
    ●   callback url
    ●   client_id, client_secret
    ●   captcha
    ●
        Např.:
        –   https://developers.facebook.com/apps
        –   https://foursquare.com/oauth/register
        –   https://dev.twitter.com/apps/new



                                                    7
OAuth 2.0 – jak na to

●
    Registrace „OAuth consumera“ u providera
    ●   callback url
    ●   client_id, client_secret
    ●   captcha
    ●
        Např.:
        –   https://developers.facebook.com/apps
        –   https://foursquare.com/oauth/register
        –   https://dev.twitter.com/apps/new



                                                    8
OAuth 2.0 – jak na to

●
    Registrace „OAuth consumera“ u providera
    ●   callback url
    ●   client_id, client_secret
    ●   captcha
    ●
        Např.:
        –   https://developers.facebook.com/apps
        –   https://foursquare.com/oauth/register
        –   https://dev.twitter.com/apps/new



                                                    9
OAuth 2.0 – jak to funguje




                             10
OAuth 2.0 – jak to funguje




                             11
1. Žádost o autorizaci na autorizačním URL


●
    https://www.facebook.com/dialog/oauth?
    ●   response_type = code
    ●
        client_id = přidělené CLIENT_ID
    ●
        redirect_uri = http://naše.callback/url/
    ●
        scope = k čemu chceme o přístup
    ●
        state = XSRF

●   https://www.facebook.com/dialog/oauth?
    client_id=(...)&response_type=code&redirect_uri=http%3A%2F
    %2Foauth2.local%2Ffacebook%2Fcallback&scope=user_about_me
    %2Cuser_photos%2Coffline_access
                                                                 12
2. Autorizační stránka


●
    Nejprve autentizace uživatele – pokud není již
    přihlášen
●
    Pak autorizace – povolí přístup k datům dle
    scope
●
    Může také rovnou přesměrovat (není to ale ve
    specifikaci)




                                                     13
2. Autorizační stránka – příklad




                                   14
2. Autorizační stránka – příklad




                                   15
OAuth 2.0 – jak to funguje




                             16
4. Přesměrování na redirect_uri


●
    Při chybě (uživatel odmítne aj.)
    ●
        http://redirect.uri?error=REASON
●
    Při potvrzení
    ●
        http://redirect.uri?
        –   code = kód, na jehož základě získáme token (další krok)
        –   state = XSRF




                                                                      17
OAuth 2.0 – jak to funguje




                             18
5. Access token request


●
    Provede naše aplikace asynchronně
●
    HTTP POST*
●   https://graph.facebook.com/oauth/access_token
    ●   client_id
    ●
        client_secret – není odhaleno uživateli
    ●
        redirect_uri – musí být stejné jako v kroku 1.
    ●
        code – viz předchozí krok



                                                         19
6. Access token, woot!


●
    Když vše souhlasí, vrátí nám provider token
●
    Bordel ve formátech: query string, JSON...
●   {
         "access_token":"2YotnFZFEjr1zCsicMWpAA",
         "expires_in":3600,
         "refresh_token":"tGzv3JOkF0XG5Qx2TlKW"
     }
●
    Token uložíme – session, databáze

                                                    20
7. Zobrazení potvrzení


●
    Zobrazíme uživateli, že je přihlášen
●
    S tokenem (= přístupový klíč) už můžeme dělat
    požadavky do API providera (než vyprší...)




                                                21
Example app




    Uka to!
      github.com/OndraM/oauth2-example
                                         22
Example app




              23
Real-world app




    Wanna more!

                  24
Real-world app




                 25
Děkuji za pozornost

                    Prezentace ke stažení:
               www.slideshare.net/OndraM
                        Zdrojáky aplikace:
       github.com/OndraM/oauth2-example
                                  Twitter:
                               @OndraM

More Related Content

Similar to OAuth 2.0 a Zend Framework

20110511 Vývoj software - produktivně, efektivně, kvalitně
20110511 Vývoj software - produktivně, efektivně, kvalitně20110511 Vývoj software - produktivně, efektivně, kvalitně
20110511 Vývoj software - produktivně, efektivně, kvalitně
Jiří Mareš
 

Similar to OAuth 2.0 a Zend Framework (9)

Trendy a nové možnosti test automation
Trendy a nové možnosti test automationTrendy a nové možnosti test automation
Trendy a nové možnosti test automation
 
Jak probíhal vývoj platformy pro vývojáře
Jak probíhal vývoj platformy pro vývojářeJak probíhal vývoj platformy pro vývojáře
Jak probíhal vývoj platformy pro vývojáře
 
JSON API: Možná nepotřebujete GraphQL
JSON API: Možná nepotřebujete GraphQLJSON API: Možná nepotřebujete GraphQL
JSON API: Možná nepotřebujete GraphQL
 
Amazon Web Services v praxi - Bezpecnost v cloudu
Amazon Web Services v praxi - Bezpecnost v clouduAmazon Web Services v praxi - Bezpecnost v cloudu
Amazon Web Services v praxi - Bezpecnost v cloudu
 
20110511 Vývoj software - produktivně, efektivně, kvalitně
20110511 Vývoj software - produktivně, efektivně, kvalitně20110511 Vývoj software - produktivně, efektivně, kvalitně
20110511 Vývoj software - produktivně, efektivně, kvalitně
 
JavaScript v GTM - Measure Camp Brno 2017
JavaScript v GTM - Measure Camp Brno 2017JavaScript v GTM - Measure Camp Brno 2017
JavaScript v GTM - Measure Camp Brno 2017
 
Bezpečnost WP, tipy pro každého - wordCamp Praha 2015
Bezpečnost WP, tipy pro každého - wordCamp Praha 2015Bezpečnost WP, tipy pro každého - wordCamp Praha 2015
Bezpečnost WP, tipy pro každého - wordCamp Praha 2015
 
Hacknutý Drupal web. A co teď?
Hacknutý Drupal web. A co teď?Hacknutý Drupal web. A co teď?
Hacknutý Drupal web. A co teď?
 
Google Tag Manager a analytika ve WordPress
Google Tag Manager a analytika ve WordPressGoogle Tag Manager a analytika ve WordPress
Google Tag Manager a analytika ve WordPress
 

More from Ondřej Machulda

More from Ondřej Machulda (11)

Selenium a WebDriver - přítomnost a budoucnost
 Selenium a WebDriver - přítomnost a budoucnost  Selenium a WebDriver - přítomnost a budoucnost
Selenium a WebDriver - přítomnost a budoucnost
 
Workshop: Functional testing made easy with PHPUnit & Selenium (phpCE Poland,...
Workshop: Functional testing made easy with PHPUnit & Selenium (phpCE Poland,...Workshop: Functional testing made easy with PHPUnit & Selenium (phpCE Poland,...
Workshop: Functional testing made easy with PHPUnit & Selenium (phpCE Poland,...
 
Selenium & PHPUnit made easy with Steward (Berlin, April 2017)
Selenium & PHPUnit made easy with Steward (Berlin, April 2017)Selenium & PHPUnit made easy with Steward (Berlin, April 2017)
Selenium & PHPUnit made easy with Steward (Berlin, April 2017)
 
Funkční testování – chybějící vrchol pyramidy (WebExpo 2016)
Funkční testování – chybějící vrchol pyramidy (WebExpo 2016)Funkční testování – chybějící vrchol pyramidy (WebExpo 2016)
Funkční testování – chybějící vrchol pyramidy (WebExpo 2016)
 
Automatické testování webů v praxi - Barcamp Ostrava 2015
Automatické testování webů v praxi - Barcamp Ostrava 2015Automatické testování webů v praxi - Barcamp Ostrava 2015
Automatické testování webů v praxi - Barcamp Ostrava 2015
 
Jak jsme přepisovali Jobs.cz na Symfony
Jak jsme přepisovali Jobs.cz na SymfonyJak jsme přepisovali Jobs.cz na Symfony
Jak jsme přepisovali Jobs.cz na Symfony
 
Optimistic/Pessimistic Offline Lock
Optimistic/Pessimistic Offline LockOptimistic/Pessimistic Offline Lock
Optimistic/Pessimistic Offline Lock
 
Hlavní problémy systému on-line rezervace vstupenek do O2 Areny
Hlavní problémy systému on-line rezervace vstupenek do O2 ArenyHlavní problémy systému on-line rezervace vstupenek do O2 Areny
Hlavní problémy systému on-line rezervace vstupenek do O2 Areny
 
Testování systému pro on-line rezervaci vstupenek do O2 Areny
Testování systému pro on-line rezervaci vstupenek do O2 ArenyTestování systému pro on-line rezervaci vstupenek do O2 Areny
Testování systému pro on-line rezervaci vstupenek do O2 Areny
 
Pionýr - stručná historie organizace
Pionýr - stručná historie organizacePionýr - stručná historie organizace
Pionýr - stručná historie organizace
 
Raid
RaidRaid
Raid
 

OAuth 2.0 a Zend Framework

  • 1. OAuth 2.0 #ZFMeetup, 9. únor 2012 Ondřej Machulda ondrej.machulda@gmail.com http://o.vlastovka.eu @OndraM
  • 2. OAuth – WTF ● Open Authorization ● „Otevřený standard pro autorizaci“ ● Autorizace vs. autentizace – autentizace – kdo jsem (identita) – autorizace – co můžu (přístup k prostředkům) ● Sdílení dat mezi službami (API) ● Vznik nedávno (1.0 v roce 2006/7) ● OAuth 2.0, draft #23 ● Zend_Oauth 2
  • 5. OAuth 2.0 - možnosti ● Client side („Implicit grant“) ● Zjednodušené, pro client-only aplikace (AJAX) ● Server side („ Authorization Code Grant“) ● Consumer (client) – naše app, chce data uživatele uložena u providera ● Uživatel – má data u providera, chce povolit přístup k nim consumerovi ● Provider (resource server) – poskytuje API pro přístup k datům uživatelů 5
  • 6. OAuth 2.0 – jak na to ● Registrace „OAuth consumera“ u providera ● callback url ● client_id, client_secret ● captcha ● Např.: – https://developers.facebook.com/apps – https://foursquare.com/oauth/register – https://dev.twitter.com/apps/new 6
  • 7. OAuth 2.0 – jak na to ● Registrace „OAuth consumera“ u providera ● callback url ● client_id, client_secret ● captcha ● Např.: – https://developers.facebook.com/apps – https://foursquare.com/oauth/register – https://dev.twitter.com/apps/new 7
  • 8. OAuth 2.0 – jak na to ● Registrace „OAuth consumera“ u providera ● callback url ● client_id, client_secret ● captcha ● Např.: – https://developers.facebook.com/apps – https://foursquare.com/oauth/register – https://dev.twitter.com/apps/new 8
  • 9. OAuth 2.0 – jak na to ● Registrace „OAuth consumera“ u providera ● callback url ● client_id, client_secret ● captcha ● Např.: – https://developers.facebook.com/apps – https://foursquare.com/oauth/register – https://dev.twitter.com/apps/new 9
  • 10. OAuth 2.0 – jak to funguje 10
  • 11. OAuth 2.0 – jak to funguje 11
  • 12. 1. Žádost o autorizaci na autorizačním URL ● https://www.facebook.com/dialog/oauth? ● response_type = code ● client_id = přidělené CLIENT_ID ● redirect_uri = http://naše.callback/url/ ● scope = k čemu chceme o přístup ● state = XSRF ● https://www.facebook.com/dialog/oauth? client_id=(...)&response_type=code&redirect_uri=http%3A%2F %2Foauth2.local%2Ffacebook%2Fcallback&scope=user_about_me %2Cuser_photos%2Coffline_access 12
  • 13. 2. Autorizační stránka ● Nejprve autentizace uživatele – pokud není již přihlášen ● Pak autorizace – povolí přístup k datům dle scope ● Může také rovnou přesměrovat (není to ale ve specifikaci) 13
  • 14. 2. Autorizační stránka – příklad 14
  • 15. 2. Autorizační stránka – příklad 15
  • 16. OAuth 2.0 – jak to funguje 16
  • 17. 4. Přesměrování na redirect_uri ● Při chybě (uživatel odmítne aj.) ● http://redirect.uri?error=REASON ● Při potvrzení ● http://redirect.uri? – code = kód, na jehož základě získáme token (další krok) – state = XSRF 17
  • 18. OAuth 2.0 – jak to funguje 18
  • 19. 5. Access token request ● Provede naše aplikace asynchronně ● HTTP POST* ● https://graph.facebook.com/oauth/access_token ● client_id ● client_secret – není odhaleno uživateli ● redirect_uri – musí být stejné jako v kroku 1. ● code – viz předchozí krok 19
  • 20. 6. Access token, woot! ● Když vše souhlasí, vrátí nám provider token ● Bordel ve formátech: query string, JSON... ● { "access_token":"2YotnFZFEjr1zCsicMWpAA", "expires_in":3600, "refresh_token":"tGzv3JOkF0XG5Qx2TlKW" } ● Token uložíme – session, databáze 20
  • 21. 7. Zobrazení potvrzení ● Zobrazíme uživateli, že je přihlášen ● S tokenem (= přístupový klíč) už můžeme dělat požadavky do API providera (než vyprší...) 21
  • 22. Example app Uka to! github.com/OndraM/oauth2-example 22
  • 24. Real-world app Wanna more! 24
  • 26. Děkuji za pozornost Prezentace ke stažení: www.slideshare.net/OndraM Zdrojáky aplikace: github.com/OndraM/oauth2-example Twitter: @OndraM