$30 off During Our Annual Pro Sale. View Details »

OAuth2.pdf

Samuele
January 15, 2020

 OAuth2.pdf

OAuth2.0: an introduction

Samuele

January 15, 2020
Tweet

More Decks by Samuele

Other Decks in Programming

Transcript

  1. OAuth 2.0
    An Introduction
    Samuele Lilli * DonCallisto - Rimini, Jan 15 2020

    View Slide

  2. WHO AM I?
    https://github.com/DonCallisto
    https://stackoverflow.com/users/814253/doncallisto
    https://labs.madisoft.it/
    [email protected]

    View Slide

  3. WE’RE
    HIRING!
    https://labs.madisoft.it/entra-nel-team/

    View Slide

  4. https://xkcd.com/936/

    View Slide

  5. SECRET
    UNIQUE
    RANDOM
    LONG (15+ CHARS)

    View Slide

  6. CHANGE IT
    REGULARLY!

    View Slide

  7. “Treat your password
    like your toothbrush.
    Don't let anybody else
    use it, and get a new
    one every six months.”
    Clifford Stoll

    View Slide

  8. PASSWORD SECURITY
    IS NOT UNDER YOUR
    DIRECT CONTROL
    (CAN’T ASSUME YOUR PASSWORD IS
    STORED IN A SECURE WAY)

    View Slide

  9. OAuth 2.0

    View Slide

  10. View Slide

  11. THE ISSUE
    (OF GIVING TO 3rd PARTY YOUR PASSWORD)
    ● Password stored in clear-text.
    ● Servers are required to support password authentication, despite the
    security weaknesses inherent in passwords.
    ● Third-party applications gain overly broad access to the resource
    owner's protected resources, leaving resource owners without any ability
    to restrict duration or access to a limited subset of resources.
    ● Resource owners cannot revoke access to an individual third party
    without revoking access to all third parties, and must do so by changing
    the third party's password.
    ● Compromise of any third-party application results in compromise of the
    end-user's password and all of the data protected by that password.

    View Slide

  12. “The OAuth 2.0 authorization
    framework enables a third-party
    application to obtain limited access to
    an HTTP service, either on
    behalf of a resource owner by
    orchestrating an approval interaction
    between the resource owner and the
    HTTP service, or by allowing the
    third-party application to obtain
    access on its own behalf.”
    https://tools.ietf.org/html/rfc6749

    View Slide

  13. “The OAuth 2.0 authorization
    framework enables a third-party
    application to obtain limited access to
    an HTTP service, either on
    behalf of a resource owner by
    orchestrating an approval interaction
    between the resource owner and the
    HTTP service, or by allowing the
    third-party application to obtain
    access on its own behalf.”
    https://tools.ietf.org/html/rfc6749

    View Slide

  14. “The OAuth 2.0 authorization
    framework enables a third-party
    application to obtain limited access to
    an HTTP service, either on
    behalf of a resource owner by
    orchestrating an approval interaction
    between the resource owner and the
    HTTP service, or by allowing the
    third-party application to obtain
    access on its own behalf.”
    https://tools.ietf.org/html/rfc6749

    View Slide

  15. “The OAuth 2.0 authorization
    framework enables a third-party
    application to obtain limited access to
    an HTTP service, either on
    behalf of a resource owner by
    orchestrating an approval interaction
    between the resource owner and the
    HTTP service, or by allowing the
    third-party application to obtain
    access on its own behalf.”
    https://tools.ietf.org/html/rfc6749

    View Slide

  16. View Slide

  17. View Slide

  18. stackoverflow.com

    View Slide

  19. stackoverflow.com
    username
    password
    login
    google.com

    View Slide

  20. stackoverflow.com
    username
    password
    login
    google.com
    google.com
    stackoverflow.com
    wants to access
    your profile
    grant deny

    View Slide

  21. stackoverflow.com
    username
    password
    login
    google.com
    google.com
    stackoverflow.com
    wants to access
    your profile
    grant deny
    callback

    View Slide

  22. stackoverflow.com
    username
    password
    login
    google.com
    google.com
    stackoverflow.com
    wants to access
    your profile
    grant deny
    callback

    View Slide

  23. “The OAuth 2.0 authorization
    framework enables a third-party
    application to obtain limited access to
    an HTTP service, either on
    behalf of a resource owner by
    orchestrating an approval interaction
    between the resource owner and the
    HTTP service, or by allowing the
    third-party application to obtain
    access on its own behalf.”
    https://tools.ietf.org/html/rfc6749

    View Slide

  24. AUTHORIZATION
    !=
    AUTHENTICATION

    View Slide

  25. OpenID CONNECT
    “OpenID Connect 1.0 is a simple identity layer
    on top of the OAuth 2.0 [RFC6749] protocol. It
    enables Clients to verify the identity of the
    End-User based on the authentication
    performed by an Authorization Server, as well
    as to obtain basic profile information about
    the End-User in an interoperable and
    REST-like manner.”
    https://openid.net/specs/openid-connect-core-1_0.html

    View Slide

  26. OpenID CONNECT
    “OpenID Connect 1.0 is a simple identity layer
    on top of the OAuth 2.0 [RFC6749] protocol. It
    enables Clients to verify the identity of the
    End-User based on the authentication
    performed by an Authorization Server, as well
    as to obtain basic profile information about
    the End-User in an interoperable and
    REST-like manner.”
    https://openid.net/specs/openid-connect-core-1_0.html

    View Slide

  27. OpenID CONNECT
    “OpenID Connect 1.0 is a simple identity layer
    on top of the OAuth 2.0 [RFC6749] protocol. It
    enables Clients to verify the identity of the
    End-User based on the authentication
    performed by an Authorization Server, as well
    as to obtain basic profile information about
    the End-User in an interoperable and
    REST-like manner.”
    https://openid.net/specs/openid-connect-core-1_0.html

    View Slide

  28. GLOSSARY
    Resource Owner: An entity capable of granting access to a protected resource.
    Resource Server: The server hosting the protected resources.
    Client: An application making protected resource requests on behalf of the resource owner
    and with its authorization. The term "client" does not imply any particular
    implementation characteristics.
    Access Token: Credentials used to access protected resources. An access token is a string
    representing an authorization issued to the client.
    Authorization Server: The server issuing access tokens to the client after successfully
    authenticating the resource owner and obtaining authorization.
    Refresh Token: Credentials used to obtain access tokens. Refresh tokens are issued to the
    client by the authorization server and are used to obtain a new access
    token when the current access token becomes invalid or expires.

    View Slide

  29. CLIENT
    RESOURCE OWNER
    AUTHORIZATION REQUEST

    View Slide

  30. CLIENT
    RESOURCE OWNER
    AUTHORIZATION REQUEST
    AUTHORIZATION GRANT

    View Slide

  31. CLIENT
    RESOURCE OWNER
    AUTHORIZATION
    SERVER
    AUTHORIZATION REQUEST
    AUTHORIZATION GRANT
    AUTHORIZATION GRANT

    View Slide

  32. CLIENT
    RESOURCE OWNER
    AUTHORIZATION
    SERVER
    AUTHORIZATION REQUEST
    AUTHORIZATION GRANT
    AUTHORIZATION GRANT
    ACCESS TOKEN

    View Slide

  33. CLIENT
    RESOURCE OWNER
    AUTHORIZATION
    SERVER
    RESOURCE SERVER
    AUTHORIZATION REQUEST
    AUTHORIZATION GRANT
    AUTHORIZATION GRANT
    ACCESS TOKEN
    ACCESS TOKEN

    View Slide

  34. CLIENT
    RESOURCE OWNER
    AUTHORIZATION
    SERVER
    RESOURCE SERVER
    AUTHORIZATION REQUEST
    AUTHORIZATION GRANT
    AUTHORIZATION GRANT
    ACCESS TOKEN
    ACCESS TOKEN
    RESOURCES

    View Slide

  35. CLIENT
    RESOURCE OWNER
    AUTHORIZATION
    SERVER
    RESOURCE SERVER
    AUTHORIZATION REQUEST
    AUTHORIZATION GRANT
    AUTHORIZATION GRANT
    ACCESS TOKEN
    ACCESS TOKEN
    RESOURCES

    View Slide

  36. CLIENT
    AUTHORIZATION
    SERVER
    AUTHORIZATION GRANT

    View Slide

  37. CLIENT
    AUTHORIZATION
    SERVER
    AUTHORIZATION GRANT
    ACCESS TOKEN & REFRESH TOKEN

    View Slide

  38. CLIENT
    AUTHORIZATION
    SERVER
    RESOURCE SERVER
    AUTHORIZATION GRANT
    ACCESS TOKEN & REFRESH TOKEN
    ACCESS TOKEN

    View Slide

  39. CLIENT
    AUTHORIZATION
    SERVER
    RESOURCE SERVER
    AUTHORIZATION GRANT
    ACCESS TOKEN & REFRESH TOKEN
    ACCESS TOKEN
    RESOURCES

    View Slide

  40. CLIENT
    AUTHORIZATION
    SERVER
    RESOURCE SERVER
    AUTHORIZATION GRANT
    ACCESS TOKEN & REFRESH TOKEN
    ACCESS TOKEN
    INVALID TOKEN

    View Slide

  41. CLIENT
    AUTHORIZATION
    SERVER
    RESOURCE SERVER
    AUTHORIZATION GRANT
    ACCESS TOKEN & REFRESH TOKEN
    ACCESS TOKEN
    INVALID TOKEN
    REFRESH TOKEN

    View Slide

  42. CLIENT
    AUTHORIZATION
    SERVER
    RESOURCE SERVER
    AUTHORIZATION GRANT
    ACCESS TOKEN & REFRESH TOKEN
    ACCESS TOKEN
    INVALID TOKEN
    REFRESH TOKEN
    ACCESS TOKEN & (OPTIONAL) REFRESH
    TOKEN

    View Slide

  43. CLIENT REGISTRATION
    ● NOT DEFINED BY THE OAUTH SPEC
    ● SPECIFY CLIENT TYPE (SEE NEXT)
    ● PROVIDE REDIRECT URIs
    ● PROVIDE OTHER INFOS (APP NAME, LOGO, …)
    ● CLIENT OBTAINS AN IDENTIFIER
    (PUBLIC; NEVER USE FOR CLIENT AUTHENTICATION!)

    View Slide

  44. CLIENT TYPES
    ● BASED ON ABILITY TO MAINTAIN THE CONFIDENTIALITY
    OF THEIR CREDENTIALS
    ● CONFIDENTIAL (Backend web app)
    ● PUBLIC (SPA, native app, …)

    View Slide

  45. OBTAINING AUTHORIZATION
    ● AUTHORIZATION CODE GRANT
    ● IMPLICIT GRANT
    ● RESOURCE OWNER PASSWORD CREDENTIAL
    ● CLIENT CREDENTIALS

    View Slide

  46. AUTHORIZATION
    CODE
    GRANT

    View Slide

  47. CLIENT

    View Slide

  48. CLIENT
    USER AGENT

    View Slide

  49. CLIENT
    AUTHORIZATION
    SERVER
    USER AGENT
    CLIENT ID & REDIRECT URI

    View Slide

  50. CLIENT
    AUTHORIZATION
    SERVER
    USER AGENT
    CLIENT ID & REDIRECT URI
    AUTHE. REQ

    View Slide

  51. CLIENT
    RESOURCE OWNER
    AUTHORIZATION
    SERVER
    USER AGENT
    CLIENT ID & REDIRECT URI
    AUTHE. REQ
    AUTHE. REQ

    View Slide

  52. CLIENT
    RESOURCE OWNER
    AUTHORIZATION
    SERVER
    USER AGENT
    CLIENT ID & REDIRECT URI
    AUTHE. REQ
    AUTHE. REQ
    USER AUTHE.

    View Slide

  53. CLIENT
    RESOURCE OWNER
    AUTHORIZATION
    SERVER
    USER AGENT
    CLIENT ID & REDIRECT URI
    AUTHE. REQ
    AUTHE. REQ
    USER AUTHE.
    USER AUTHE.

    View Slide

  54. CLIENT
    RESOURCE OWNER
    AUTHORIZATION
    SERVER
    USER AGENT
    CLIENT ID & REDIRECT URI
    AUTHE. REQ
    AUTHE. REQ
    USER AUTHE.
    USER AUTHE.
    AUTHORIZATION CODE

    View Slide

  55. CLIENT
    RESOURCE OWNER
    AUTHORIZATION
    SERVER
    USER AGENT
    CLIENT ID & REDIRECT URI
    AUTHE. REQ
    AUTHE. REQ
    USER AUTHE.
    USER AUTHE.
    AUTHORIZATION CODE
    AUTHORIZATION CODE

    View Slide

  56. CLIENT
    RESOURCE OWNER
    AUTHORIZATION
    SERVER
    USER AGENT
    CLIENT ID & REDIRECT URI
    AUTHE. REQ
    AUTHE. REQ
    USER AUTHE.
    USER AUTHE.
    AUTHORIZATION CODE
    AUTHORIZATION CODE
    AUTHORIZATION CODE & REDIRECT URI

    View Slide

  57. CLIENT
    RESOURCE OWNER
    AUTHORIZATION
    SERVER
    USER AGENT
    CLIENT ID & REDIRECT URI
    AUTHE. REQ
    AUTHE. REQ
    USER AUTHE.
    USER AUTHE.
    AUTHORIZATION CODE
    AUTHORIZATION CODE
    AUTHORIZATION CODE & REDIRECT URI
    ACCESS TOKEN (& OPTIONAL REFRESH TOKEN)

    View Slide

  58. CLIENT
    RESOURCE OWNER
    AUTHORIZATION
    SERVER
    USER AGENT
    CLIENT ID & REDIRECT URI
    AUTHE. REQ
    AUTHE. REQ
    USER AUTHE.
    USER AUTHE.

    View Slide

  59. AUTHORIZATION REQUEST
    GET
    /authorize?response_type=code&client_id
    =s6BhdRkqt3&redirect_uri=https%3A%2F%
    2Fclient%2Eexample%2Ecom%2Fcb&scop
    e=aScope&state=xyz HTTP/1.1
    Host: server.example.com

    View Slide

  60. AUTHORIZATION REQUEST
    GET
    /authorize?response_type=code&client_id
    =s6BhdRkqt3&redirect_uri=https%3A%2F%
    2Fclient%2Eexample%2Ecom%2Fcb&scop
    e=aScope&state=xyz HTTP/1.1
    Host: server.example.com

    View Slide

  61. AUTHORIZATION REQUEST
    GET
    /authorize?response_type=code&client_id
    =s6BhdRkqt3&redirect_uri=https%3A%2F%
    2Fclient%2Eexample%2Ecom%2Fcb&scop
    e=aScope&state=xyz HTTP/1.1
    Host: server.example.com

    View Slide

  62. AUTHORIZATION REQUEST
    GET
    /authorize?response_type=code&client_id
    =s6BhdRkqt3&redirect_uri=https%3A%2F%
    2Fclient%2Eexample%2Ecom%2Fcb&scop
    e=aScope&state=xyz HTTP/1.1
    Host: server.example.com

    View Slide

  63. AUTHORIZATION REQUEST
    GET
    /authorize?response_type=code&client_id
    =s6BhdRkqt3&redirect_uri=https%3A%2F%
    2Fclient%2Eexample%2Ecom%2Fcb&scop
    e=aScope&state=xyz HTTP/1.1
    Host: server.example.com

    View Slide

  64. AUTHORIZATION REQUEST
    GET
    /authorize?response_type=code&client_id
    =s6BhdRkqt3&redirect_uri=https%3A%2F%
    2Fclient%2Eexample%2Ecom%2Fcb&scop
    e=aScope&state=xyz HTTP/1.1
    Host: server.example.com

    View Slide

  65. CLIENT
    AUTHORIZATION
    SERVER
    USER AGENT
    AUTHORIZATION CODE
    AUTHORIZATION CODE

    View Slide

  66. AUTHORIZATION RESPONSE
    HTTP/1.1 302 Found
    Location:
    https://client.example.com/cb?code=Splxl
    OBeZQQYbYS6WxSbIA&state=xyz

    View Slide

  67. AUTHORIZATION RESPONSE
    HTTP/1.1 302 Found
    Location:
    https://client.example.com/cb?code=Splxl
    OBeZQQYbYS6WxSbIA&state=xyz

    View Slide

  68. AUTHORIZATION RESPONSE
    HTTP/1.1 302 Found
    Location:
    https://client.example.com/cb?code=Splxl
    OBeZQQYbYS6WxSbIA&state=xyz

    View Slide

  69. AUTHORIZATION RESPONSE
    HTTP/1.1 302 Found
    Location:
    https://client.example.com/cb?code=Splxl
    OBeZQQYbYS6WxSbIA&state=xyz

    View Slide

  70. CLIENT
    AUTHORIZATION
    SERVER
    AUTHORIZATION CODE & REDIRECT URI

    View Slide

  71. ACCESS TOKEN REQUEST
    POST /token HTTP/1.1
    Host: server.example.com
    Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
    Content-Type: application/x-www-form-urlencoded
    grant_type=authorization_code&code=SplxlOBeZQQYbYS6WxS
    bIA&redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%
    2Fcb

    View Slide

  72. ACCESS TOKEN REQUEST
    POST /token HTTP/1.1
    Host: server.example.com
    Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
    Content-Type: application/x-www-form-urlencoded
    grant_type=authorization_code&code=SplxlOBeZQQYbYS6WxS
    bIA&redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%
    2Fcb

    View Slide

  73. ACCESS TOKEN REQUEST
    POST /token HTTP/1.1
    Host: server.example.com
    Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
    Content-Type: application/x-www-form-urlencoded
    grant_type=authorization_code&code=SplxlOBeZQQYbYS6WxS
    bIA&redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%
    2Fcb

    View Slide

  74. ACCESS TOKEN REQUEST
    POST /token HTTP/1.1
    Host: server.example.com
    Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
    Content-Type: application/x-www-form-urlencoded
    grant_type=authorization_code&code=SplxlOBeZQQYbYS6WxS
    bIA&redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%
    2Fcb

    View Slide

  75. ACCESS TOKEN REQUEST
    POST /token HTTP/1.1
    Host: server.example.com
    Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
    Content-Type: application/x-www-form-urlencoded
    grant_type=authorization_code&code=SplxlOBeZQQYbYS6WxS
    bIA&redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%
    2Fcb

    View Slide

  76. CLIENT
    AUTHORIZATION
    SERVER
    ACCESS TOKEN (& OPTIONAL REFRESH TOKEN)

    View Slide

  77. ACCESS TOKEN RESPONSE
    HTTP/1.1 200 OK
    Content-Type: application/json;charset=UTF-8
    Cache-Control: no-store
    Pragma: no-cache
    {
    "access_token":"2YotnFZFEjr1zCsicMWpAA",
    "token_type":"example",
    "expires_in":3600,
    "refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA",
    "example_parameter":"example_value"
    }

    View Slide

  78. ACCESS TOKEN RESPONSE
    HTTP/1.1 200 OK
    Content-Type: application/json;charset=UTF-8
    Cache-Control: no-store
    Pragma: no-cache
    {
    "access_token":"2YotnFZFEjr1zCsicMWpAA",
    "token_type":"example",
    "expires_in":3600,
    "refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA",
    "example_parameter":"example_value"
    }

    View Slide

  79. ACCESS TOKEN RESPONSE
    HTTP/1.1 200 OK
    Content-Type: application/json;charset=UTF-8
    Cache-Control: no-store
    Pragma: no-cache
    {
    "access_token":"2YotnFZFEjr1zCsicMWpAA",
    "token_type":"example",
    "expires_in":3600,
    "refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA",
    "example_parameter":"example_value"
    }

    View Slide

  80. IMPLICIT
    GRANT

    View Slide

  81. CLIENT

    View Slide

  82. CLIENT
    USER AGENT

    View Slide

  83. CLIENT AUTHORIZATION
    SERVER
    USER AGENT
    CLIENT ID & REDIRECT URI

    View Slide

  84. CLIENT AUTHORIZATION
    SERVER
    USER AGENT
    CLIENT ID & REDIRECT URI
    AUTHE. REQ

    View Slide

  85. CLIENT
    RESOURCE OWNER
    AUTHORIZATION
    SERVER
    USER AGENT
    CLIENT ID & REDIRECT URI
    AUTHE. REQ
    AUTHE. REQ

    View Slide

  86. CLIENT
    RESOURCE OWNER
    AUTHORIZATION
    SERVER
    USER AGENT
    CLIENT ID & REDIRECT URI
    AUTHE. REQ
    AUTHE. REQ
    USER AUTHE.

    View Slide

  87. CLIENT
    RESOURCE OWNER
    AUTHORIZATION
    SERVER
    USER AGENT
    CLIENT ID & REDIRECT URI
    AUTHE. REQ
    AUTHE. REQ
    USER AUTHE.
    USER AUTHE.

    View Slide

  88. CLIENT
    RESOURCE OWNER
    AUTHORIZATION
    SERVER
    USER AGENT
    CLIENT ID & REDIRECT URI
    AUTHE. REQ
    AUTHE. REQ
    USER AUTHE.
    USER AUTHE.
    REDIRECT URI WITH ACCESS
    TOKEN IN FRAGMENT

    View Slide

  89. CLIENT
    RESOURCE OWNER
    AUTHORIZATION
    SERVER
    USER AGENT
    CLIENT ID & REDIRECT URI
    AUTHE. REQ
    AUTHE. REQ
    USER AUTHE.
    USER AUTHE.
    REDIRECT URI WITH ACCESS
    TOKEN IN FRAGMENT
    WEB-HOSTED
    CLIENT RESOURCE
    REDIRECT URI (W/O FRAGMENT)

    View Slide

  90. CLIENT
    RESOURCE OWNER
    AUTHORIZATION
    SERVER
    USER AGENT
    CLIENT ID & REDIRECT URI
    AUTHE. REQ
    AUTHE. REQ
    USER AUTHE.
    USER AUTHE.
    REDIRECT URI WITH ACCESS
    TOKEN IN FRAGMENT
    WEB-HOSTED
    CLIENT RESOURCE
    REDIRECT URI (W/O FRAGMENT)
    SCRIPT

    View Slide

  91. CLIENT
    RESOURCE OWNER
    AUTHORIZATION
    SERVER
    USER AGENT
    CLIENT ID & REDIRECT URI
    AUTHE. REQ
    AUTHE. REQ
    USER AUTHE.
    USER AUTHE.
    REDIRECT URI WITH ACCESS
    TOKEN IN FRAGMENT
    WEB-HOSTED
    CLIENT RESOURCE
    REDIRECT URI (W/O FRAGMENT)
    SCRIPT
    ACCESS TOKEN

    View Slide

  92. CLIENT
    RESOURCE OWNER
    AUTHORIZATION
    SERVER
    USER AGENT
    CLIENT ID & REDIRECT URI
    AUTHE. REQ
    AUTHE. REQ
    USER AUTHE.
    USER AUTHE.

    View Slide

  93. AUTHORIZATION REQUEST
    GET
    /authorize?response_type=token&client_i
    d=s6BhdRkqt3&redirect_uri=https%3A%2F
    %2Fclient%2Eexample%2Ecom%2Fcb&sco
    pe=aScope&state=xyz HTTP/1.1
    Host: server.example.com

    View Slide

  94. AUTHORIZATION REQUEST
    GET
    /authorize?response_type=token&client_i
    d=s6BhdRkqt3&redirect_uri=https%3A%2F
    %2Fclient%2Eexample%2Ecom%2Fcb&sco
    pe=aScope&state=xyz HTTP/1.1
    Host: server.example.com

    View Slide

  95. AUTHORIZATION REQUEST
    GET
    /authorize?response_type=token&client_i
    d=s6BhdRkqt3&redirect_uri=https%3A%2F
    %2Fclient%2Eexample%2Ecom%2Fcb&sco
    pe=aScope&state=xyz HTTP/1.1
    Host: server.example.com

    View Slide

  96. AUTHORIZATION REQUEST
    GET
    /authorize?response_type=token&client_i
    d=s6BhdRkqt3&redirect_uri=https%3A%2F
    %2Fclient%2Eexample%2Ecom%2Fcb&sco
    pe=aScope&state=xyz HTTP/1.1
    Host: server.example.com

    View Slide

  97. AUTHORIZATION REQUEST
    GET
    /authorize?response_type=token&client_i
    d=s6BhdRkqt3&redirect_uri=https%3A%2F
    %2Fclient%2Eexample%2Ecom%2Fcb&sco
    pe=aScope&state=xyz HTTP/1.1
    Host: server.example.com

    View Slide

  98. AUTHORIZATION REQUEST
    GET
    /authorize?response_type=token&client_i
    d=s6BhdRkqt3&redirect_uri=https%3A%2F
    %2Fclient%2Eexample%2Ecom%2Fcb&sco
    pe=aScope&state=xyz HTTP/1.1
    Host: server.example.com

    View Slide

  99. CLIENT AUTHORIZATION
    SERVER
    USER AGENT
    REDIRECT URI WITH ACCESS
    TOKEN IN FRAGMENT
    WEB-HOSTED
    CLIENT RESOURCE
    REDIRECT URI (W/O FRAGMENT)

    View Slide

  100. ACCESS TOKEN RESPONSE
    HTTP/1.1 302 Found
    Location:
    http://example.com/cb#access_token=2Yo
    tnFZFEjr1zCsicMWpAA&state=xyz&token_t
    ype=example&expires_in=3600

    View Slide

  101. ACCESS TOKEN RESPONSE
    HTTP/1.1 302 Found
    Location:
    http://example.com/cb#access_token=2Yo
    tnFZFEjr1zCsicMWpAA&state=xyz&token_t
    ype=example&expires_in=3600

    View Slide

  102. ACCESS TOKEN RESPONSE
    HTTP/1.1 302 Found
    Location:
    http://example.com/cb#access_token=2Yo
    tnFZFEjr1zCsicMWpAA&state=xyz&token_t
    ype=example&expires_in=3600

    View Slide

  103. ACCESS TOKEN RESPONSE
    HTTP/1.1 302 Found
    Location:
    http://example.com/cb#access_token=2Yo
    tnFZFEjr1zCsicMWpAA&state=xyz&token_t
    ype=example&expires_in=3600

    View Slide

  104. ACCESS TOKEN RESPONSE
    HTTP/1.1 302 Found
    Location:
    http://example.com/cb#access_token=2Yo
    tnFZFEjr1zCsicMWpAA&state=xyz&token_t
    ype=example&expires_in=3600

    View Slide

  105. ACCESS TOKEN RESPONSE
    HTTP/1.1 302 Found
    Location:
    http://example.com/cb#access_token=2Yo
    tnFZFEjr1zCsicMWpAA&state=xyz&token_t
    ype=example&expires_in=3600

    View Slide

  106. QUESTION TIME

    View Slide

  107. IS THIS
    GRANT TYPE
    SECURE
    ?

    View Slide

  108. ● Redirect URI missing or improper validation
    ● Browser history
    ● Token injection

    View Slide

  109. HISTORICAL REASONS FOR
    IMPLICIT GRANT
    ● Browsers can manipulate only url fragment
    without causing a page reload (not true
    anymore since HistoryAPI)
    ● CORS (Authorization Code Flow requires a
    POST at some point)

    View Slide

  110. ACCESS TOKEN REQUEST
    POST /token HTTP/1.1
    Host: server.example.com
    Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
    Content-Type: application/x-www-form-urlencoded
    grant_type=authorization_code&code=SplxlOBeZQQYbYS6WxS
    bIA&redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%
    2Fcb

    View Slide

  111. PKCE FOR THE RESCUE!
    (PROOF-KEY FOR CODE EXCHANGE)
    PRONOUNCED PIXIE

    View Slide

  112. PKCE FOR THE RESCUE!
    (PROOF-KEY FOR CODE EXCHANGE)
    PRONOUNCED PIXIE(s)

    View Slide

  113. PKCE FOR THE RESCUE!
    (PROOF-KEY FOR CODE EXCHANGE)
    AUTHORIZATION CODE GRANT

    View Slide

  114. PKCE FOR THE RESCUE!
    (PROOF-KEY FOR CODE EXCHANGE)
    PKCE PKCE
    AUTHORIZATION CODE GRANT

    View Slide

  115. CLIENT
    RESOURCE OWNER
    AUTHORIZATION
    SERVER
    USER AGENT
    CLIENT ID & REDIRECT URI
    AUTHE. REQ
    AUTHE. REQ
    USER AUTHE.
    USER AUTHE.
    AUTHORIZATION CODE
    AUTHORIZATION CODE
    AUTHORIZATION CODE & REDIRECT URI
    ACCESS TOKEN (& OPTIONAL REFRESH TOKEN)

    View Slide

  116. CLIENT
    RESOURCE OWNER
    AUTHORIZATION
    SERVER
    USER AGENT
    CLIENT ID, REDIRECT URI
    CODE CHALLENGE,CODE
    CHALLENGE & HASH
    METHOD
    AUTHE. REQ
    AUTHE. REQ
    USER AUTHE.
    USER AUTHE.
    AUTHORIZATION CODE
    AUTHORIZATION CODE
    AUTHORIZATION CODE, REDIRECT URI & CODE VERIFIER
    ACCESS TOKEN (& OPTIONAL REFRESH TOKEN)
    GENERATE CODE VERIFIER
    AND ITS HASH (CODE
    CHALLENGE)

    View Slide

  117. AUTHORIZATION REQUEST
    GET
    /authorize?response_type=code&client_id
    =s6BhdRkqt3&redirect_uri=https%3A%2F%
    2Fclient%2Eexample%2Ecom%2Fcb&scop
    e=aScope&state=xyz HTTP/1.1
    Host: server.example.com

    View Slide

  118. AUTHORIZATION REQUEST
    GET
    /authorize?response_type=code&client_id
    =s6BhdRkqt3&redirect_uri=https%3A%2F%
    2Fclient%2Eexample%2Ecom%2Fcb&scop
    e=aScope&state=xyz&code_challenge=aeb
    e62e61ad1d2c1b4290dd&code_challenge_
    method=S256 HTTP/1.1
    Host: server.example.com

    View Slide

  119. AUTHORIZATION REQUEST
    GET
    /authorize?response_type=code&client_id
    =s6BhdRkqt3&redirect_uri=https%3A%2F%
    2Fclient%2Eexample%2Ecom%2Fcb&scop
    e=aScope&state=xyz&code_challenge=aeb
    e62e61ad1d2c1b4290dd&code_challenge_
    method=S256 HTTP/1.1
    Host: server.example.com

    View Slide

  120. AUTHORIZATION REQUEST
    GET
    /authorize?response_type=code&client_id
    =s6BhdRkqt3&redirect_uri=https%3A%2F%
    2Fclient%2Eexample%2Ecom%2Fcb&scop
    e=aScope&state=xyz&code_challenge=aeb
    e62e61ad1d2c1b4290dd&code_challenge_
    method=S256 HTTP/1.1
    Host: server.example.com

    View Slide

  121. ACCESS TOKEN REQUEST
    POST /token HTTP/1.1
    Host: server.example.com
    Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
    Content-Type: application/x-www-form-urlencoded
    grant_type=authorization_code&code=SplxlOBeZQQYbYS6WxS
    bIA&redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%
    2Fcb

    View Slide

  122. ACCESS TOKEN REQUEST
    POST /token HTTP/1.1
    Host: server.example.com
    Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
    Content-Type: application/x-www-form-urlencoded
    grant_type=authorization_code&code=SplxlOBeZQQYbYS6WxS
    bIA&redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%
    2Fcb&code_verifier=abcd

    View Slide

  123. OBTAINING AUTHORIZATION
    ● AUTHORIZATION CODE GRANT
    ● IMPLICIT GRANT
    ● RESOURCE OWNER PASSWORD CREDENTIAL
    ● CLIENT CREDENTIALS

    View Slide

  124. OBTAINING AUTHORIZATION
    ● AUTHORIZATION CODE GRANT (+PKCE)
    ● IMPLICIT GRANT
    ● RESOURCE OWNER PASSWORD CREDENTIAL
    ● CLIENT CREDENTIALS

    View Slide

  125. WORTH OF A LOOK...
    ● AMAZON COGNITO
    ● OKTA
    ● AUTH0
    ● ORY HYDRA

    View Slide

  126. QUESTIONS?

    View Slide

  127. CREDITS
    - https://stocksnap.io/photo/SZE0NDYC0F (George Becker)
    - https://stocksnap.io/photo/KV6IATK4SM (Emily Morter)
    - https://www.iconfinder.com/icons/172626/male_user_icon

    View Slide