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