Slide 1

Slide 1 text

What's New in OAuth 2.1 Aaron Parecki Senior Security Architect, Okta API Days Australia • September 2020

Slide 2

Slide 2 text

@aaronpk September 2020 oauth.net/2

Slide 3

Slide 3 text

@aaronpk September 2020 OAuth 2.0 RFC6749 OAuth Core Authorization Code Implicit Password Client Credentials Grant Types

Slide 4

Slide 4 text

@aaronpk September 2020

Slide 5

Slide 5 text

@aaronpk September 2020 OAuth 2.0 RFC6749 OAuth Core Authorization Code Implicit Password Client Credentials Grant Types RFC6750 Bearer Tokens Token Usage Tokens in HTTP Header Tokens in POST Form Body Tokens in GET Query String

Slide 6

Slide 6 text

@aaronpk September 2020

Slide 7

Slide 7 text

@aaronpk September 2020 OAuth Server OAuth Client Passing Data via the Front Channel Did they catch 
 it? Did someone else 
 steal it? Is this really 
 from the real 
 OAuth server?

Slide 8

Slide 8 text

@aaronpk September 2020 OAuth 2.0 RFC6749 OAuth Core Authorization Code Implicit Password Client Credentials RFC6750 Bearer Tokens RFC7636 +PKCE Tokens in HTTP Header Tokens in POST Form Body Tokens in GET Query String

Slide 9

Slide 9 text

@aaronpk September 2020 OAuth 2.0 RFC6749 OAuth Core Authorization Code Implicit Password Client Credentials RFC6750 Bearer Tokens RFC7636 +PKCE RFC8252 PKCE for mobile Tokens in HTTP Header Tokens in POST Form Body Tokens in GET Query String

Slide 10

Slide 10 text

@aaronpk September 2020 OAuth 2.0 RFC6749 OAuth Core Authorization Code Implicit Password Client Credentials RFC6750 Bearer Tokens RFC7636 +PKCE RFC8252 PKCE for mobile Browser App BCP PKCE for SPAs Tokens in HTTP Header Tokens in POST Form Body Tokens in GET Query String

Slide 11

Slide 11 text

@aaronpk September 2020

Slide 12

Slide 12 text

@aaronpk September 2020 https://example.com https://app.example.com https://auth.example GET / HTML, CSS, etc POST /token access token CORS

Slide 13

Slide 13 text

@aaronpk September 2020 caniuse.com/cors

Slide 14

Slide 14 text

@aaronpk September 2020 OAuth 2.0 RFC6749 OAuth Core Authorization Code Implicit Password Client Credentials RFC6750 Bearer Tokens RFC7636 +PKCE RFC8252 PKCE for mobile Browser App BCP PKCE for SPAs Tokens in HTTP Header Tokens in POST Form Body Tokens in GET Query String

Slide 15

Slide 15 text

@aaronpk September 2020 OAuth 2.0 RFC6749 OAuth Core Authorization Code Implicit Password Client Credentials RFC6750 Bearer Tokens RFC7636 +PKCE RFC8252 PKCE for mobile Browser App BCP PKCE for SPAs Tokens in HTTP Header Tokens in POST Form Body Tokens in GET Query String

Slide 16

Slide 16 text

@aaronpk September 2020 OAuth 2.0 for Browser-Based Apps

Slide 17

Slide 17 text

@aaronpk September 2020 OAuth 2.0 for Browser-Based Apps

Slide 18

Slide 18 text

@aaronpk September 2020 OAuth 2.0 RFC6749 OAuth Core Authorization Code Implicit Password Client Credentials RFC6750 Bearer Tokens Tokens in HTTP Header Tokens in POST Form Body Tokens in GET Query String RFC7636 +PKCE RFC8252 PKCE for mobile Browser App BCP PKCE for SPAs PKCE for confidential clients Security BCP

Slide 19

Slide 19 text

@aaronpk September 2020 Password oauth.net/2/oauth-best-practice

Slide 20

Slide 20 text

@aaronpk September 2020 Password oauth.net/2/oauth-best-practice • Added to OAuth to enable migrating applications from HTTP Basic Auth or using a stored password to OAuth

Slide 21

Slide 21 text

@aaronpk September 2020 OAuth 2.0 Security BCP • All OAuth clients MUST use PKCE with the authorization code flow • Password grant MUST NOT be used • Use exact string matching for redirect URIs • No access tokens in query strings • Refresh tokens for public clients must be 
 sender-constrained or one-time use oauth.net/2/oauth-best-practice

Slide 22

Slide 22 text

@aaronpk September 2020 RFC6749 RFC6750 CLIENT TYPE AUTH GRANT TYPE RFC6819 RFC7009 RFC7592 RFC7662 RFC7636 RFC7591 RFC7519 BUILDING YOUR APPLICATION RFC8252 OIDC RFC8414 STATE TLS CSRF UMA 2 FAPI RFC7515 RFC7516 RFC7517 RFC7518 TOKEN POP SECURITY BCP CIBA HTTP SIGNING MUTUAL TLS SPA BCP JARM JAR TOKEN DPOP PAR

Slide 23

Slide 23 text

@aaronpk September 2020 OAuth 2.0 RFC6749 OAuth Core Authorization Code Implicit Password Client Credentials RFC6750 Bearer Tokens Tokens in HTTP Header Tokens in POST Form Body Tokens in GET Query String RFC7636 +PKCE RFC8252 PKCE for mobile Browser App BCP PKCE for SPAs PKCE for confidential clients Security BCP

Slide 24

Slide 24 text

@aaronpk September 2020 OAuth 2.1 Authorization Code Client Credentials +PKCE Tokens in HTTP Header Tokens in POST Form Body

Slide 25

Slide 25 text

OAuth 2.1 oauth.net/2.1

Slide 26

Slide 26 text

@aaronpk September 2020 OAuth 2.1 Consolidate the OAuth 2.0 specs,
 adding best practices, 
 removing deprecated features Capture current best practices in OAuth 2.0 under a single name Add references to extensions that didn't exist when OAuth 2.0 was published

Slide 27

Slide 27 text

@aaronpk September 2020 OAuth 2.1 No new behavior defined by OAuth 2.1 Non-Goals: Don't include anything experimental, 
 in progress or not widely implemented

Slide 28

Slide 28 text

@aaronpk September 2020 OAuth 2.1 Authors: Dick Hardt, Aaron Parecki, Torsten Lodderstedt • OAuth 2.1 is a consolidation of: 
 OAuth 2.0 (RFC6749), Native Apps BCP (RFC8252), PKCE (RFC7636), Browser-Based Apps BCP (draft), Security BCP (draft), 
 Bearer Tokens (RFC6750) • Grant types defined: Authorization Code with PKCE, Client Credentials • Exact redirect URI matching • No Bearer tokens in query strings • Refresh tokens for SPAs must be sender-constrained or one-time use • Implicit and password grants are omitted

Slide 29

Slide 29 text

@aaronpk September 2020 OAuth 2.1 Client Types Public Confidential

Slide 30

Slide 30 text

@aaronpk September 2020 OAuth 2.1 Client Types Public Confidential Credentialed

Slide 31

Slide 31 text

@aaronpk September 2020 Credentialed Client This distinction already exists in OAuth 2.0! OAuth 2.0: If the client type is confidential or the client was issued client credentials, the client MUST authenticate... OAuth 2.1: Confidential or credentialed clients MUST authenticate...

Slide 32

Slide 32 text

@aaronpk September 2020 Credentialed Client • A client that has credentials, but whose identity is not confirmed • e.g. a client that obtains a client secret via dynamic client registration

Slide 33

Slide 33 text

@aaronpk September 2020 OAuth 2.1 oauth.net/2.1 tools.ietf.org/html/draft-ietf-oauth-v2-1 Recently adopted by the OAuth Working Group

Slide 34

Slide 34 text

Thank you! @aaronpk aaronpk.com oauth.wtf