oauth 2.0: theory and practice - pedro f©lix's shared memory
TRANSCRIPT
whoami
• Daniel Correia
• Fast learner Junior Software Engineer
• Passionate about everything Web-related
• Currently working with the SAPO SDB team
• Pedro Félix
• Teacher at ISEL – the engineering school of the Lisbon Polytechnic Institute
• Independent consultant working with the SAPO SDB team
2
OAuth History
• OAuth started circa 2007
• 2008 - IETF normalization started in 2008
• 2010 - RFC 5849 defines OAuth 1.0
• 2010 - WRAP (Web Resource Authorization Profiles) proposed by Microsoft, Yahoo! And Google
• 2010 - OAuth 2.0 work begins in IETF
• 2012
• RFC 6749 - The OAuth 2.0 Authorization Framework
• RFC 6750 - The OAuth 2.0 Authorization Framework: Bearer Token Usage
3
An use case• The cast of characters
• www.storecode.example – code repository service (e.g. github.com)
• www.checkcode.example – code analysis service (e.g. travis-ci.org)
• Alice – a fictional developer
• The problem
• How can Alice allow checkcode to access her private code stored at storecode?
4
www.checkcode.example www.storecode.example
stores private codebuild and analyze code
fetch Alice’s code
Alice
The password anti-pattern
• A solution: Alice shares her password with checkcode
• Problems:
• Unrestricted access – checkcode has all of Alice’s permissions• read and write on all code repositories, issues, wiki, ...
• No easy revocation• Changing password implies revoking all other client applications
• Password management• Changing password implies updating all the delegated applications
5
The protocol
6
Alice’s authentication and authorization delegation to checkcode
token response
authorization response code
authorization request
service request
access_token
service response Alice’s resource representation
access_token
token request client creds code
www.checkcode.example www.storecode.example
Resource Server (aka Service)
Authorization Server
Alice’s authentication and authorization delegation to checkcode
Resource Owner(aka User)
The OAuth 2.0 roles
10
token response
authorization response code
authorization request
service request
access_token
service response Alice’s resource representation
access_token
token request client creds code
www.storecode.example
Client
www.checkcode.example
Client Types
• Confidential“Clients capable of maintaining the confidentiality of their credentials” (e.g. client implemented on a secure server)
• Public“Clients incapable of maintaining the confidentiality of their credentials” (e.g. clients executing on the device used by the resource owner)
Client Types
• 3 implementation scenarios
• Single client – all the users (web app)
• One client per user (native mobile app)
• One client per multiple users (family shared tablet, IPTV Box)
• Dynamic Client Registration
• Client Registration Endpoint – still in draft
• Turning public clients into private client instances
• Not a closed problem
TokenEndpoint
Authorization Endpoint
Authorization and Token Endpoints
14
Alice’s authentication and authorization delegation to checkcode
token response
authorization response code
authorization request
access_token
token request client creds code
www.checkcode.example www.storecode.example
Authorization Server
Front Channel
Back Channel
Front and back channels
• Front channel
• Authorization Endpoint (AE)
• Authorization request – redirect from Client to AE via the User-agent
• Human interface – User authentication and authorization delegation
• Authorization response – redirect from AE to Client via the User-agent
• Back channel
• Token Endpoint (TE)
• Direct request-response between Client and TE
• No User interaction
• No human interface
15
Scopes
• scope
• “scope of the access request”
• Parameter on the authorization request or token request• Set of space-delimited strings
• E.g https://www.googleapis.com/auth/calendar.readonly
• Usages
• Client – Must find the required scopes for each service interaction – docs
• User – AS translates the scopes into friendly User messages
• Service – Maps a scope into (URIs, methods) or (service, operation)
• Granted scope may differ from requested scopes
• No provision for mandatory and optional scopes
16
The grant concept• Represents the logical outcome of the User’s authorization
• User identity
• Client identity
• Scope
• Core domain concept
• Bound to all the tokens• Code
• Access token
• Refresh token
17
OAuth 2.0: a framework not a protocol
• The previous protocol is just a one of many options
• Three parts
1. Obtaining user authorization
2. Issuing access tokens
3. Using access tokens to authorize service requests
• Multiple protocol flows
• Different User authorization
• Critique
• Complexity
• Compromises interoperability
• WS-* again?
19
Obtaining authorization
• Authorization Code Grant
• The previous protocol
• Implicit Grant
• Authorization Endpoint returns the access token directly
• Javascript Clients running on the browser
• Resource Owner Password Credentials Grant
• User gives password to Client, Client uses it to obtain access token
• Client Credentials Grant
• No User, Client access on its own behalve
• Extensions
• Identity federation, SAML assertions
20
Implicit Grant
21
Alice’s authentication and authorization delegation to checkcode
authorization response
authorization request
service request
service response Alice’s resource representation
access_token
Javascript Client on browser www.storecode.example
access_token
Resource Owner Password Credentials Grant
22
token response
service request
access_token
service response Alice’s resource representation
access_token
token request client creds
www.checkcode.example www.storecode.example
Grant access
User password
User password
Client Credentials Grant
23
token response
service request
access_token
service response Alice’s resource representation
access_token
token request client creds
www.checkcode.example www.storecode.example
Accessing the Token EndpointPOST /token_endpoint HTTP/1.1
Host: as.storecode.example
Content-Type: application/x-www-form-urlencoded
Authorization: Basic <client_id:client_secret>
grant_type=authorization_code
code=AbCdEf...
redirect_uri=https://redirect.checkcode.example
client_id=...&
client_secret=..
24
HTTP/1.1 200 OKContent-Type: application/json;charset=UTF-8Cache-Control: no-storePragma: no-cache
{"access_token":"2YotnFZFEjr1zCsicMWpAA","token_type":"Bearer","expires_in":3600,"refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA","example_parameter":"example_value"
}
Accessing the service (Resource Server)
• How to associate the access token to the request message?
• Bearer – just append the token to the request message – RFC 6750
• Just like “bearer checks” or HTTP cookies
• MAC (holder-of-key) – prove the possession of a key – still draft
• Similar to OAuth 1.0 or to AWS (used in S3)
25
GET /resource HTTP/1.1
Host: api.storecode.example
Authorization: Bearer <access_token>
GET /resource HTTP/1.1
Host: api.storecode.example
Authorization: MAC id=“...”,
nonce=“...”,
mac=“...”
Bearer vs. MAC
• Bearer• Simpler – no signatures
• Require HTTPS• Incorrect use
• RFC 6750
• Similar to cookie usage• Behare of the fallacy
• Same origin policies
• Discoverability
• MAC• Safer
• More complex – signature• Client library integration
26
Token structure• Not covered by the RFCs
• Token content options• Artifact (reference/handle) – reference to stored data
• Store Hash(artifact) and not artifact directly
• At least 128 bits of entropy
• Revocation – just clear the stored data
• Assertions – contains the (cryptographically protected) data• JWT – JSON Web Token
• Revocation – harder (e.g. maintain revocation list)
• Token data• Validity period
• Grant (User, Client, Scopes)
• Type ({code, access_token, refresh_token})
• Usage (e.g. code should be used only once)
27
Refresh tokens
• Two lifetimes
• Access tokens – short lifetime
• Bearer usage
• Refresh tokens – long lifetime
• Usage requires client credentials
• Useful for revocation
• Token Endpoint - obtain new access token given a refresh token
• Critique: state management on the client
28
Security: authorization request
• Request-response correlation• state parameter - unpredictable• Session-fixation attack
• Code search• At least 128 bit of entropy• Small usage period (e.g. 5 minutes)• Code bound to a client_id• Code usage throttled by client_id
29
Alice’s authentication and authorization delegation to checkcode
authorization response: code, state
authorization request: response_type=code, client_id, redirect_uri, scope, state
www.checkcode.example www.storecode.example
Security: code exchange
30
Alice’s authentication and authorization delegation to checkcode
token response
authorization response: code, ...
access_token
token request: client_secret, redirect_uri, code, ...
www.checkcode.example www.storecode.example
authorization request: response_type=code, client_id, redirect_uri, scope, state
Mobile: authorization request
• Use a “web view”• e.g. Windows 8 WebAuthenticationBroker
• Use an external browser - how to obtain the response parameters?• Redirect
• Use localhost• Special redirect URI urn:ietf:wg:oauth:2.0:oob (Google uses it but not on RFC)• Custom redirect URI scheme
31
Alice’s authentication and authorization delegation to checkcode
authorization response: code, state
authorization request: response_type=code, client_id, redirect_uri, scope, state
www.checkcode.example www.storecode.example
OAuth 2.0: for authorization not authentication
• Not safe for authentication in the general case
• OpenID Connect – OAuth 2.0 + authentication
32
Facebook AS
Facebook Client
AnotherFacebook Client
code
Facebook API
access_token
access_token access_token
access_tokenFacebook API
access_token
impersonation
SDB - Service Delivery Broker
• Brokering between service clients and service enablers (implementations)• Access Control (OAuth 1.0, API keys, ...)
• Caching, protocol and format translation, ...
• Public market place - https://store.services.sapo.pt
• Multi-tenant
33
Service Delivery Broker(SDB)
Service EnablersService Enablers
Service Enablers
Service ClientsService Clients
Service Clientshttps://services.sapo.pt
OAuth 2.0SDB Connect
References• IETF Web Authorization Working Group - http://datatracker.ietf.org/wg/oauth/
• RFCs
• Drafts
• Eran Hammer
• OAuth 2.0 and the Road to Hell - http://hueniverse.com/2012/07/oauth-2-0-and-the-road-to-hell/
• OAuth 2.0 - Looking Back and Moving On - http://vimeo.com/52882780
• John Bradley - http://www.thread-safe.com/2012/07/the-oauth-2-sky-is-not-falling.html
34