SlideShare ist ein Scribd-Unternehmen logo
1 von 26
Downloaden Sie, um offline zu lesen
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

Weitere ähnliche Inhalte

Ähnlich wie OAuth 2.0 a Zend Framework

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 automationOndřej Machulda
 
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ářePavel Dedík
 
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 GraphQLOndřej Machulda
 
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 clouduJiří Pihík
 
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š
 
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 2017Michal Blažek
 
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 2015Vladimír Smitka
 
Hacknutý Drupal web. A co teď?
Hacknutý Drupal web. A co teď?Hacknutý Drupal web. A co teď?
Hacknutý Drupal web. A co teď?Radim Klaška
 
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 WordPressVladimír Smitka
 

Ähnlich wie 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
 

Mehr von Ondřej Machulda

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 Ondřej Machulda
 
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,...Ondřej Machulda
 
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)Ondřej Machulda
 
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)Ondřej Machulda
 
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 2015Ondřej Machulda
 
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 SymfonyOndřej Machulda
 
Optimistic/Pessimistic Offline Lock
Optimistic/Pessimistic Offline LockOptimistic/Pessimistic Offline Lock
Optimistic/Pessimistic Offline LockOndřej Machulda
 
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 ArenyOndřej Machulda
 
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 ArenyOndřej Machulda
 
Pionýr - stručná historie organizace
Pionýr - stručná historie organizacePionýr - stručná historie organizace
Pionýr - stručná historie organizaceOndřej Machulda
 

Mehr von 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