Reiter István kollégánk, ASP.NET MVP cím büszke birtokosa előadott a budapest.NET meetup-on a következő témáról:
Bevezetés az OAuth2 alapú hitelesítésbe: megmutatjuk, hogy egész pontosan mi történik a Login with Facebook gomb megnyomása után.
6. Megoldás?
• 2006 – Twitter OpenID
• Kell egy olyan API amivel az authentikáció kidelegálható
• 2007 – OAuth vitafórum
• 2010 – OAuth 1.0
• Csak böngésző, mobil eszközöket nem támogat
9. OAuth 2.0
• Lényegesen egyszerűbb
• HMAC -----> HTTPS
• Visszafelé NEM kompatibilis
• Kik használják?
•
•
•
•
•
Facebook
Google
Microsoft
Twitter
… és még sokan mások
14. OAuth 2.0 - Flow
• A felhasználó használni szeretné az alkalmazásunkat
• https://www.facebook.com/dialog/oauth?client_id={app-id}&redirect_uri={redirect-uri}
• Opcionális paraméterek:
• State: CSRF (elsődlegesen, de nem erre lett kitalálva)
• Response type: code (URL parameter), token (URL fragment), code%20token
• Scope
• HTTP GET
• HTTP 302 + Location
15. OAuth 2.0 - Flow
• Authorization code és state a válaszban
• … akárcsak a hibaüzenetek
• responsetype=
• code: becseréljük egy access token-re
• token: ellenőrizzük (inspection endpoint)
• code%20token: választhatunk
• Access token (GET és POST is lehetséges):
• https://graph.facebook.com/oauth/access_token?
client_id={app-id}
&redirect_uri={redirect-uri}
&client_secret={app-secret}
&code={code-parameter}
16. OAuth 2.0
Bearer Token
• Elég ha birtokunkban van
• Nincs szükség más kulcsra
• HTTP Authorization header
• Ritkán van cache vagy log róla
• Query string vagy form
formában is használható, ha a
provider engedélyezi
18. OAuth 2.0
• Refresh token: access token mellett érkezhet
• …de Facebook nem ad ilyet
• Új access token-t kérhetünk vele, ha a régi lejárt
• A szabvány nem ad iránymutatást...
• grant_type=refresh_token&refresh_token=SplxlOBeZQQYbYS6
19. OAuth 2.0 - Problémák
• SSL/TLS: alapos ellenőrzést kíván
• Message Authentication Code (MAC)
• A megvalósítások különböznek, a szabvány csak ajánlásokat ad
• Threat model
• Bejelentkező oldal testreszabása nem lehetséges vagy korlátozott