Top Banner
OAuth 2.0 for developers - the technology you need but never really learned Mikkel Flindt Heisterberg OnTime® by IntraVision
49

Introduction to OAuth 2.0 - the technology you need but never really learned

Feb 08, 2017

Download

Software

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Introduction to OAuth 2.0 - the technology you need but never really learned

OAuth 2.0 for developers - the technology you need but never really learnedMikkel Flindt Heisterberg

OnTime® by IntraVision

Page 2: Introduction to OAuth 2.0 - the technology you need but never really learned

Agenda• The problem we are trying to solve• Demo (OAuth for users i.e. almost real people)• The flow…• OAuth for administrators• OAuth for developers i.e. real people• Demo w/ code• Q&A

Mikkel Flindt Heisterberg

Twitter: @lekkimE-mail: [email protected]://lekkimworld.comhttp://slideshare.net/lekkim

Page 3: Introduction to OAuth 2.0 - the technology you need but never really learned

The problem we are trying to solve

Page 4: Introduction to OAuth 2.0 - the technology you need but never really learned

The problem we are trying to solve Give me your Social

site username and password and we can

play…

Page 5: Introduction to OAuth 2.0 - the technology you need but never really learned

The problem we are trying to solve

Doesn’t really trust that shiny new site – or IBM Connections for that matter…

Give me your Social site username and

password and we can play…

Page 6: Introduction to OAuth 2.0 - the technology you need but never really learned

The problem we are trying to solve I support OAuth 2.0

and don’t want your credentials – just

authorize me to work on your behalf…

Page 7: Introduction to OAuth 2.0 - the technology you need but never really learned

The problem we are trying to solve

1

2

3

Page 8: Introduction to OAuth 2.0 - the technology you need but never really learned

it’s about letting a service access user data without

knowing the users credentials... - or without the user being

there...

Page 9: Introduction to OAuth 2.0 - the technology you need but never really learned

demo

Page 10: Introduction to OAuth 2.0 - the technology you need but never really learned

Demo safety

Page 11: Introduction to OAuth 2.0 - the technology you need but never really learned

it’s not as simple as that but almost...

Page 12: Introduction to OAuth 2.0 - the technology you need but never really learned

The flow…

CLIENT

PROVIDER

USER

1

Page 13: Introduction to OAuth 2.0 - the technology you need but never really learned

The flow…

CLIENT

PROVIDER

USER

2

Page 14: Introduction to OAuth 2.0 - the technology you need but never really learned

The flow…

CLIENT

PROVIDER

USER

3

Page 15: Introduction to OAuth 2.0 - the technology you need but never really learned

The flow…

CLIENT

PROVIDER

USER

4

Page 16: Introduction to OAuth 2.0 - the technology you need but never really learned

The flow…

CLIENT

PROVIDER

USER

5

Page 17: Introduction to OAuth 2.0 - the technology you need but never really learned

The flow…

CLIENT

PROVIDER

USER

6

Page 18: Introduction to OAuth 2.0 - the technology you need but never really learned

The flow…

CLIENT

PROVIDER

USER

7

Page 19: Introduction to OAuth 2.0 - the technology you need but never really learned

The flow…

CLIENT

PROVIDER

USER

8

Page 20: Introduction to OAuth 2.0 - the technology you need but never really learned

The flow…

CLIENT

PROVIDER

USER

9

Page 21: Introduction to OAuth 2.0 - the technology you need but never really learned

but less cartoony and with real words this time...

Page 22: Introduction to OAuth 2.0 - the technology you need but never really learned

1) User accesses site and logs in

CLIENT

PROVIDER

USER

1

Page 23: Introduction to OAuth 2.0 - the technology you need but never really learned

2) The site checks to see if it has Tokens for the Provider in its credential store

CLIENT

PROVIDER

USER

2

Page 24: Introduction to OAuth 2.0 - the technology you need but never really learned

3) The site sends a redirection to the client telling it to go authorize it at the Provider. The URL contains the Client redirect_uri and client_id

CLIENT

PROVIDER

USER

3

Page 25: Introduction to OAuth 2.0 - the technology you need but never really learned

4) The user use the redirect URL and go the Provider and logs in if not already logged in. Then he authorizes the Client

CLIENT

PROVIDER

USER

4

Page 26: Introduction to OAuth 2.0 - the technology you need but never really learned

5) The Provider returns a time limited authorization_code in a redirection URL to the user

CLIENT

PROVIDER

USER

5

Page 27: Introduction to OAuth 2.0 - the technology you need but never really learned

6) The User sends the authorization_code to the Client

CLIENT

PROVIDER

USER

6

Page 28: Introduction to OAuth 2.0 - the technology you need but never really learned

7) Out-of-band the Client sends the authorization_code, it’s client_id, redirect_uri and secret to the Provider

CLIENT

PROVIDER

USER

7

Page 29: Introduction to OAuth 2.0 - the technology you need but never really learned

8) The Provider exchange the authorization_code for a short lived access_token (yellow) and a longer lived refresh_token (blue)

CLIENT

PROVIDER

USER

8

Page 30: Introduction to OAuth 2.0 - the technology you need but never really learned

9) When the User now access the site it can use the access_token to work as the User. Even if the user is not there i.e. not logged into the site…

CLIENT

PROVIDER

USER

9

Page 31: Introduction to OAuth 2.0 - the technology you need but never really learned

If not you should ask now…

Page 32: Introduction to OAuth 2.0 - the technology you need but never really learned

Application registration

Page 33: Introduction to OAuth 2.0 - the technology you need but never really learned

WSADMINCOMING UP

On-premises

Page 34: Introduction to OAuth 2.0 - the technology you need but never really learned

OAuth for administrators

• IBM Connections use the built in OAuth provider from WebSphere Application Server

• Administrators are responsible for registering the app with the OAuth provider

• You use – you guessed it – wsadmin commands to do it…

On-premises

Page 35: Introduction to OAuth 2.0 - the technology you need but never really learned

OAuth for administratorsexecfile(”oauthAdmin.py”)OAuthApplicationRegistrationService.addApplication(”myapp1”, ”My App1", "https://www.renovations.com/oauth/redirect")OAuthApplicationRegistrationService.browseApplications()[{display_name=My App1, client_id=myapp1, client_secret=xxxxxxxxxxxxxxxxxxxxxxxxxx, redirect_uri=https://www.renovations.com/oauth/redirect}]OAuthApplicationRegistrationService.deleteApplication(”myapp1”)The application with the id myapp1 was deleted successfully.

https://www-01.ibm.com/support/knowledgecenter/SSYGQH_5.0.0/admin/admin/r_admin_common_oauth_manage_list.dita

On-premises

Page 36: Introduction to OAuth 2.0 - the technology you need but never really learned

IBM Connections Cloud Cloud

Page 37: Introduction to OAuth 2.0 - the technology you need but never really learned

IBM Connections Cloud Cloud

Page 38: Introduction to OAuth 2.0 - the technology you need but never really learned

I’M ADEVELOPER

Page 39: Introduction to OAuth 2.0 - the technology you need but never really learned
Page 40: Introduction to OAuth 2.0 - the technology you need but never really learned

OAuth for developersGenerate the authorization redirection URL and have the user visit it. Suggest it’s done in a separate window.

Syntaxhttps://<hostname>/oauth2/endpoint/connectionsProvider/authorize?response_type=code&client_id=<client_id>&callback_uri=<callback_uri>

Examplehttps://social.example.com/oauth2/endpoint/connectionsProvider/authorize?response_type=code&client_id=myapp1&callback_uri=https://myapp.shinysite.com/oauth20_cb

Page 41: Introduction to OAuth 2.0 - the technology you need but never really learned

OAuth for developersGenerate the authorization redirection URL and have the user visit it. Suggest it’s done in a separate window.

Syntaxhttps://<hostname>/oauth2/endpoint/connectionsProvider/authorize?response_type=code&client_id=<client_id>&callback_uri=<callback_uri>

Examplehttps://social.example.com/oauth2/endpoint/connectionsProvider/authorize?response_type=code&client_id=myapp1&callback_uri=https://myapp.shinysite.com/oauth20_cb

Must match exactly what the Provider have on record…

Page 42: Introduction to OAuth 2.0 - the technology you need but never really learned

OAuth for developersThe user logs in to the Provider (if not already) and authorizes your app… Hopefully...

Page 43: Introduction to OAuth 2.0 - the technology you need but never really learned

OAuth for developersThe Provider sends back a redirection URL to the User containing an authorization code causing the User to send it to the Client

Syntaxhttps://<client_redirection_uri>?code=<authorization_code>https://<client_redirection_uri>?oauth_error=<error_code>

Examplehttps://myapp.shinysite.com/oauth20_cb ?code=user_specific_auth_code

Page 44: Introduction to OAuth 2.0 - the technology you need but never really learned

OAuth for developersClient POST’s the authorization code, client ID, redirection URI and client secret to the Provider out-of-band (server to server, not through User)SyntaxPOST /oauth2/endpoint/connectionsProvider/token HTTP/1.0Host: <hostname>Content-Length: <length>Connection: Closeclient_secret=<client_secret>&client_id=<client_id>&grant_type=authorization_code&code=<auth_code>&callback_uri=<callback_uri>

ExamplePOST /oauth2/endpoint/connectionsProvider/token HTTP/1.0Host: social.example.comContent-Length: 161Connection: Closeclient_secret=my_secret_string&client_id=myapp1&grant_type=authorization_code&code=user_specific_auth_code&callback_uri=https://myapp.shinysite.com/oauth20_cb

Page 45: Introduction to OAuth 2.0 - the technology you need but never really learned

OAuth for developersProvider responds with (JSON) response with access token, refresh token and expiry info. It would be wise that the client saves the tokens…

Example{ "access_token”: "d86o7UP0gj2c...GVzTPADsFv7”, "token_type": "Bearer", "expires_in": 43200, "scope": "", "refresh_token": "EWcVt5uaaXC9Pc...pTTgvrLRrs56gR”}

Response format is Provider specific i.e. IBM Connections Cloud returns tokens in plain text format…

Page 46: Introduction to OAuth 2.0 - the technology you need but never really learned

OAuth for developersTo make requests on behalf of the User the Client needs to set the access token in an Authorization header

ExampleGET /connections/opensocial/oauth/rest /activitystreams/@me/@all/@all HTTP/1.0Host: social.example.comAuthorization: Bearer d86o7UP0gj2c...GVzTPADsFv7Connection: Close

If the Client use an access token and receive a 401 back from the Provider it should attempt to refresh the access token.

Page 47: Introduction to OAuth 2.0 - the technology you need but never really learned

OAuth for developersYou can refresh the tokens i.e. if a call using the access token returns a 401 from the Provider by using the refresh_token. If that also fails the user probably revoked your authorization.

SyntaxPOST /oauth2/endpoint/connectionsProvider/token HTTP/1.0Host: <hostname>Content-Length: <length>Connection: Closeclient_secret=<client_secret>&client_id=<client_id>&grant_type=refresh_token&refresh_token=<refresh_token>

ExamplePOST /oauth2/endpoint/connectionsProvider/token HTTP/1.0Host: social.example.comContent-Length: 104Connection: Closeclient_secret=my_secret_string&client_id=myapp1&grant_type=refresh_token&refresh_token=my_refresh_token

Page 48: Introduction to OAuth 2.0 - the technology you need but never really learned

Demo

Page 49: Introduction to OAuth 2.0 - the technology you need but never really learned

Mikkel Flindt Heisterberg

Twitter: @lekkimE-mail: [email protected]://lekkimworld.comhttp://slideshare.net/lekkim

Dev04 – XPages & Office 365 by Marky Roden