OAuth Martin Kuba, ÚVT MU Co je OAuth ● otevřený standard specifikující protokol pro autorizaci přístupu k vyjmenovaným operacím nějakého API, ale lze jej využít i pro autentizaci v případě, že dané API má operace pro získání informací o uživateli ● umožňuje povolit pro konkrétního poskytovatele služby jen určité operace (ze všech operací) na API určitého poskytovatele API ● podporují API Google, Facebook, Twitter, ... ● seznam implementací - http://oauth.net/2/ Co umožňuje OAuth ● není omezeno jen na web, lze i pro mobilní aplikace (Android, iOS), desktopové, SmartTV, embedded v set-top-boxech ● spolupráce dvou různých web serverů ● např. uživatel Google Disk může povolit jinému webu od firmy X, případně jejich mobilní aplikaci, čtení dokumentů a zápis jejich upravených verzí ● aplikace může přistupovat k API i bez uživatele Jak to funguje 1. vývojář aplikace se zaregistruje u poskytovatele API ○ Google API console https://code.google.com/apis/console/ ○ Facebook developers https://developers.facebook.com/apps/ 2. zaregistruje aplikaci, získá client_secret 3. při příchodu uživatele do aplikace přesměruje na OAuth server se žádostí o oprávnění k určitým operacím 4. aplikace získá od uživatele jednorázový kód 5. aplikace vymění kód a client_secret za token 6. aplikace volá API a prokazuje se tokenem Registrace aplikace u Google Zaregistrovaná aplikace u Google Povolená API u Google Zaregistrovaná aplikace u Facebooku Příchod uživatele do aplikace ● uživatel si vybere poskytovatele účtu ● na screenshotu ○ Facebook a Google - OAuth ○ Seznam.cz a MojeID - OpenID ○ MU, UK, ZČU, JU - SAML Odeslání uživatele na OAuth server Uživatel se přihlásí k účtu ... ... a schválí povolení k operacím Obdobně u Google Aplikace vymění kód od uživatele a vlastní client_secret za token Aplikace volá API ● aplikace volá určitá URL ● prokazuje se tokenem ● odpověď je obvykle JSON Uživatel může odebrat oprávnění Uživatel může odebrat oprávnění OAuth shrnutí ● uživatel i aplikace jsou zaregistrovány ● oba mají své heslo (client_secret u app) ● poskytovatel API v dokumentaci uvádí možná oprávnění (seznam operací) ● aplikace žádá uživatele o konkrétní oprávnění (povolení k určité množině operací) ● pokud uživatel schválí, aplikace získá token ● uživatel může kdykoliv token revokovat Srovnání s OpenID 1.0/2.0 ● otevřený standard ○ OpenID - pro autentizaci ○ OAuth - pro autorizaci ● aplikace se registrovat ○ OpenID - nemusí ○ OAuth - musí ● poskytovatel totožnosti ○ OpenID - kdokoliv, ale jak mu věřit ? ○ OAuth - konkrétní, API-specific Srovnání se SAML ● SAML ○ autentizace, jako OpenID 1.0/2.0 ○ potřebuje Discovery Service/WAYF ○ uživatel nemá kontrolu nad vydávanými údaji ○ IdP a SP se musí vzájemně dohodnout ○ SP nemůže požádat uživatele o více informací ○ uživatel může schválit všechny nebo nic ● OAuth ○ autorizace ○ autentizace jako nulová autorizace ○ uživatel má kontrolu nad vydávanými oprávněními ○ může je i zpětně revokovat OpenID Connect (OIDC) ● nadstavba nad OAuth 2.0 ● OAuth 2 - uživatel, vlastnící zdroje/data na resource serveru, zplnomocňuje cizí aplikaci, aby jeho jménem se zdroji zacházela ● authorization server vydá token se specifickými scopes omezujícími možné akce na API resource serveru ● OIDC specifikuje jednotné UserInfo API autorizované pomocí OAuth 2 k vydání informací o uživateli Konec Děkuji za pozornost