SlideShare ist ein Scribd-Unternehmen logo
1 von 25
OAuth
An introduction to OAuth and Instagram
Me


Daniel Oskarsson, Lead Mobile Developer


LinkedIn, http://danieloskarsson.com/
Facebook, http://danieloskarsson.se/
Agenda

Purpose
Flow
Demo
State
Wikipedia
_"OAuth is an open standard for authorization. It
allows users to share their private resources (e.g.
photos, videos, contact lists) stored on one site
with another site without having to hand out their
credentials, typically supplying username and
password tokens instead. Each token grants access
to a specific site (e.g., a video editing site) for
specific resources (e.g., just videos from a
specific album) and for a defined duration (e.g.,
the next 2 hours). This allows a user to grant a
third party site access to their information stored
with another service provider, without sharing
their access permissions or the full extent of
their data."_

Source: Wikipedia
Authorization

_"The process of authorization is distinct from
that of authentication. Whereas authentication is
the process of verifying that "you are who you say
you are", authorization is the process of verifying
that "you are permitted to do what you are trying
to do". Authorization thus presupposes
authentication."_

Source: Wikipedia
Origin

OAuth started in November 2006
when Twitter looked into attaching
OpenID (decentralized
authentication) to their public
API. Discussions concluded _"that
there were no open standards for
API access delegation."_
Twitter
Facebook
Facebook OAuth Apps
Users
From a user standpoint OAuth provides a way of using
applications without giving away the personal username and
password to service providers. Facebook Apps are probably the
most recognized example of OAuth applications. The user:

    Starts the client application

    If not already done, authorizes the request

OAuth also allows for scoping by listing the privileges that
an application will get if the user authorizes the request.

    E.g. read your email, post as you...

It is up to the user to authorize the entire scope (all
privileges), or to not authorize the request.
Developers
From an app developer perspective, the flow is something like this:

    Create an account at the Service Provider

    Register your client application at the Service Provider

The Service Provider provides a client id and client secret:

    CLIENT ID: a8427e34273a4aeea67792e34d020771

    CLIENT SECRET: 9b3b93a9c08f400cb066c8848d0b4bad

When you want data from the Service Provider, you make a request to
the service using your client id:

    curl https://api.instagram.com/v1/media/popular?
    client_id=a8427e34273a4aeea67792e34d020771

The command above uses the media/popular endpoint and the provided
client_id to get JSON data about popular media.
Scoping
Which data that is accessible only by
authenticating with a client id is determined by
the Service Provider.

Instagram: _"For the most part, Instagram’s API
only requires the use of a client_id. A client_id
simply associates your server, script, or program
with a specific application. However, some requests
require authentication - specifically requests made
on behalf of a user."_

Making API calls on behalf of an Instagram user
requires an access token.
Access tokens
The only way for a client application to obtain an access
token is to have the user authorize the application with the
provided scope (granting privileges).

The process starts with a client application request to the an
authorization server, providing client id, secret and a
redirect url. The server appends the code and redirects to an
authorization dialog.

    If the user is not logged in, he or she will be asked to
    authenticate

    If the user has not authorized the application he or she
    will be asked to do so

The user is then redirected to the redirection url provided in
the first request.

Here two things can happen...
Server side or Implicit

Either the redirection url leads to a server controlled by the client
application developer that takes the provided code parameter and
exchanges it for an access token by posting the code to an access
token url. This is referred to as the server side flow.

 or

The access token is appended as a fragment in the redirection URL.
This method allows applications without any server component to
receive an access_token with ease. It is used by my demo application
and is being referred to as the implicit flow.

A user can at any time explicitly revoke an authorization and render
the obtained access token useless. Some Service Providers, such as
Facebook, also invalidate access tokens after a certain time.
Result
ACCESS TOKEN:
223611870.f59def8.c188753de3b843be
b3b1ac15a2356cad
curl “https://api.instagram.com/
v1/media/search?
lat=57.7018646&lng=11.9549555&acce
ss_token=223611870.f59def8.c188753
de3b843beb3b1ac15a2356cad”
Demo
Getting Instagram data based on GPS position
Demo

Clone source
Login to Instagram
Register a client
Copy client id and secret to app
Test
Test cases

Not logged into Instagram, Not
authorized client
Logged into Instagram, Authorized
client
Logged into Instagram, Not
authorized client
Versions
OAuth 2.0

_"OAuth 2.0 is the next evolution of the OAuth protocol and is not
backward compatible with OAuth 1.0. OAuth 2.0 focuses on client
developer simplicity while providing specific authorization flows for
web applications, desktop applications, mobile phones, and living
room devices. The specification is being developed[2] within the IETF
OAuth WG and was expected to be finalized by the end of 2010
according to Eran Hammer.[3] However, due to discording views about
the evolution of OAuth, Hammer left the working group[4]"_

_"Facebook's new Graph API only supports OAuth 2.0 and is the largest
implementation of the emerging standard.[5] As of 2011, both
Google[6] and Microsoft[7] had added OAuth 2.0 experimental support
to their APIs."_

Source: Wikipedia
Critique
_"When compared with OAuth 1.0, the 2.0 specification is more
complex, less interoperable, less useful, more incomplete, and most
importantly, less secure."_

Eran Hammer one of the leaders of the effort describes how he, and
OAuth, failed. [OAuth 2.0 and the Road to Hell]

_"At the core of the problem is the strong and unbridgeable conflict
between the web and the enterprise worlds. The OAuth working group at
the IETF started with strong web presence. But as the work dragged on
(and on) past its first year, those web folks left along with every
member of the original 1.0 community. The group that was left was
largely all enterprise… and me."_

Source: [OAuth 2.0 and the Road to Hell](http://hueniverse.com/
2012/07/oauth-2-0-and-the-road-to-hell/), July, 2012
Service Providers ...
Dropbox        Instagram

Facebook       Microsoft

Flickr         LinkedIn

Foursquare     Netflix

Github         Tumblr

Google         Twitter
Source


https://github.com/
danieloskarsson/

Weitere ähnliche Inhalte

Was ist angesagt?

Using ArcGIS with OAuth 2.0 - Esri DevSummit Dubai 2013
Using ArcGIS with OAuth 2.0 - Esri DevSummit Dubai 2013Using ArcGIS with OAuth 2.0 - Esri DevSummit Dubai 2013
Using ArcGIS with OAuth 2.0 - Esri DevSummit Dubai 2013
Aaron Parecki
 

Was ist angesagt? (19)

Claims-Based Identity in SharePoint 2010
Claims-Based Identity in SharePoint 2010Claims-Based Identity in SharePoint 2010
Claims-Based Identity in SharePoint 2010
 
O auth2 with angular js
O auth2 with angular jsO auth2 with angular js
O auth2 with angular js
 
SharePoint 2010, Claims-Based Identity, Facebook, and the Cloud
SharePoint 2010, Claims-Based Identity, Facebook, and the CloudSharePoint 2010, Claims-Based Identity, Facebook, and the Cloud
SharePoint 2010, Claims-Based Identity, Facebook, and the Cloud
 
Using ArcGIS with OAuth 2.0 - Esri DevSummit Dubai 2013
Using ArcGIS with OAuth 2.0 - Esri DevSummit Dubai 2013Using ArcGIS with OAuth 2.0 - Esri DevSummit Dubai 2013
Using ArcGIS with OAuth 2.0 - Esri DevSummit Dubai 2013
 
Optimizing your job apply pages with the LinkedIn profile API
Optimizing your job apply pages with the LinkedIn profile APIOptimizing your job apply pages with the LinkedIn profile API
Optimizing your job apply pages with the LinkedIn profile API
 
Google+ sign in for mobile & web apps
Google+ sign in for mobile & web appsGoogle+ sign in for mobile & web apps
Google+ sign in for mobile & web apps
 
OAuth 2.0 - The fundamentals, the good , the bad, technical primer and commo...
OAuth 2.0  - The fundamentals, the good , the bad, technical primer and commo...OAuth 2.0  - The fundamentals, the good , the bad, technical primer and commo...
OAuth 2.0 - The fundamentals, the good , the bad, technical primer and commo...
 
Maintest
MaintestMaintest
Maintest
 
OAuth 2
OAuth 2OAuth 2
OAuth 2
 
Maintest3
Maintest3Maintest3
Maintest3
 
Maintest2
Maintest2Maintest2
Maintest2
 
3rd-Party Authn/Authz
3rd-Party Authn/Authz3rd-Party Authn/Authz
3rd-Party Authn/Authz
 
MainFinalOAuth
MainFinalOAuthMainFinalOAuth
MainFinalOAuth
 
08 asp.net session11
08 asp.net session1108 asp.net session11
08 asp.net session11
 
OAuth2 and Spring Security
OAuth2 and Spring SecurityOAuth2 and Spring Security
OAuth2 and Spring Security
 
Microservice with OAuth2
Microservice with OAuth2Microservice with OAuth2
Microservice with OAuth2
 
OAuth2 Introduction
OAuth2 IntroductionOAuth2 Introduction
OAuth2 Introduction
 
OAuth
OAuthOAuth
OAuth
 
Creating a Sign On with Open id connect
Creating a Sign On with Open id connectCreating a Sign On with Open id connect
Creating a Sign On with Open id connect
 

Ähnlich wie OAuth Android Göteborg

Oauth2 and OWSM OAuth2 support
Oauth2 and OWSM OAuth2 supportOauth2 and OWSM OAuth2 support
Oauth2 and OWSM OAuth2 support
Gaurav Sharma
 
OAuth - Don’t Throw the Baby Out with the Bathwater
OAuth - Don’t Throw the Baby Out with the Bathwater OAuth - Don’t Throw the Baby Out with the Bathwater
OAuth - Don’t Throw the Baby Out with the Bathwater
Apigee | Google Cloud
 

Ähnlich wie OAuth Android Göteborg (20)

OAuth2 Presentaion
OAuth2 PresentaionOAuth2 Presentaion
OAuth2 Presentaion
 
Devteach 2017 OAuth and Open id connect demystified
Devteach 2017 OAuth and Open id connect demystifiedDevteach 2017 OAuth and Open id connect demystified
Devteach 2017 OAuth and Open id connect demystified
 
Flaws in Oauth 2.0 Can Oauth be used as a Security Server
Flaws in Oauth 2.0 Can Oauth be used as a Security ServerFlaws in Oauth 2.0 Can Oauth be used as a Security Server
Flaws in Oauth 2.0 Can Oauth be used as a Security Server
 
Oauth2 and OWSM OAuth2 support
Oauth2 and OWSM OAuth2 supportOauth2 and OWSM OAuth2 support
Oauth2 and OWSM OAuth2 support
 
Ladies Be Architects - Study Group III: OAuth 2.0 (Ep 1)
Ladies Be Architects - Study Group III: OAuth 2.0 (Ep 1)Ladies Be Architects - Study Group III: OAuth 2.0 (Ep 1)
Ladies Be Architects - Study Group III: OAuth 2.0 (Ep 1)
 
OAuth with Salesforce - Demystified
OAuth with Salesforce - DemystifiedOAuth with Salesforce - Demystified
OAuth with Salesforce - Demystified
 
OAuth
OAuthOAuth
OAuth
 
Oauth2.0 tutorial
Oauth2.0 tutorialOauth2.0 tutorial
Oauth2.0 tutorial
 
Implementing open authentication_in_your_app
Implementing open authentication_in_your_appImplementing open authentication_in_your_app
Implementing open authentication_in_your_app
 
Stateless Auth using OAUTH2 & JWT
Stateless Auth using OAUTH2 & JWTStateless Auth using OAUTH2 & JWT
Stateless Auth using OAUTH2 & JWT
 
Oauth
OauthOauth
Oauth
 
OAuth - Don’t Throw the Baby Out with the Bathwater
OAuth - Don’t Throw the Baby Out with the Bathwater OAuth - Don’t Throw the Baby Out with the Bathwater
OAuth - Don’t Throw the Baby Out with the Bathwater
 
OAuth
OAuthOAuth
OAuth
 
Microservice security with spring security 5.1,Oauth 2.0 and open id connect
Microservice security with spring security 5.1,Oauth 2.0 and open id connect Microservice security with spring security 5.1,Oauth 2.0 and open id connect
Microservice security with spring security 5.1,Oauth 2.0 and open id connect
 
Stateless Auth using OAuth2 & JWT
Stateless Auth using OAuth2 & JWTStateless Auth using OAuth2 & JWT
Stateless Auth using OAuth2 & JWT
 
OAuth2 - Introduction
OAuth2 - IntroductionOAuth2 - Introduction
OAuth2 - Introduction
 
Kt 15 07-2013
Kt 15 07-2013Kt 15 07-2013
Kt 15 07-2013
 
SAML VS OAuth 2.0 VS OpenID Connect
SAML VS OAuth 2.0 VS OpenID ConnectSAML VS OAuth 2.0 VS OpenID Connect
SAML VS OAuth 2.0 VS OpenID Connect
 
Managing enterprise applications, permissions, and consent in Azure Active Di...
Managing enterprise applications, permissions, and consent in Azure Active Di...Managing enterprise applications, permissions, and consent in Azure Active Di...
Managing enterprise applications, permissions, and consent in Azure Active Di...
 
Managing enterprise applications, permissions, and consent in Azure Active Di...
Managing enterprise applications, permissions, and consent in Azure Active Di...Managing enterprise applications, permissions, and consent in Azure Active Di...
Managing enterprise applications, permissions, and consent in Azure Active Di...
 

Kürzlich hochgeladen

Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 

Kürzlich hochgeladen (20)

Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 

OAuth Android Göteborg

  • 1. OAuth An introduction to OAuth and Instagram
  • 2. Me Daniel Oskarsson, Lead Mobile Developer LinkedIn, http://danieloskarsson.com/ Facebook, http://danieloskarsson.se/
  • 4. Wikipedia _"OAuth is an open standard for authorization. It allows users to share their private resources (e.g. photos, videos, contact lists) stored on one site with another site without having to hand out their credentials, typically supplying username and password tokens instead. Each token grants access to a specific site (e.g., a video editing site) for specific resources (e.g., just videos from a specific album) and for a defined duration (e.g., the next 2 hours). This allows a user to grant a third party site access to their information stored with another service provider, without sharing their access permissions or the full extent of their data."_ Source: Wikipedia
  • 5. Authorization _"The process of authorization is distinct from that of authentication. Whereas authentication is the process of verifying that "you are who you say you are", authorization is the process of verifying that "you are permitted to do what you are trying to do". Authorization thus presupposes authentication."_ Source: Wikipedia
  • 6. Origin OAuth started in November 2006 when Twitter looked into attaching OpenID (decentralized authentication) to their public API. Discussions concluded _"that there were no open standards for API access delegation."_
  • 10. Users From a user standpoint OAuth provides a way of using applications without giving away the personal username and password to service providers. Facebook Apps are probably the most recognized example of OAuth applications. The user: Starts the client application If not already done, authorizes the request OAuth also allows for scoping by listing the privileges that an application will get if the user authorizes the request. E.g. read your email, post as you... It is up to the user to authorize the entire scope (all privileges), or to not authorize the request.
  • 11. Developers From an app developer perspective, the flow is something like this: Create an account at the Service Provider Register your client application at the Service Provider The Service Provider provides a client id and client secret: CLIENT ID: a8427e34273a4aeea67792e34d020771 CLIENT SECRET: 9b3b93a9c08f400cb066c8848d0b4bad When you want data from the Service Provider, you make a request to the service using your client id: curl https://api.instagram.com/v1/media/popular? client_id=a8427e34273a4aeea67792e34d020771 The command above uses the media/popular endpoint and the provided client_id to get JSON data about popular media.
  • 12. Scoping Which data that is accessible only by authenticating with a client id is determined by the Service Provider. Instagram: _"For the most part, Instagram’s API only requires the use of a client_id. A client_id simply associates your server, script, or program with a specific application. However, some requests require authentication - specifically requests made on behalf of a user."_ Making API calls on behalf of an Instagram user requires an access token.
  • 13. Access tokens The only way for a client application to obtain an access token is to have the user authorize the application with the provided scope (granting privileges). The process starts with a client application request to the an authorization server, providing client id, secret and a redirect url. The server appends the code and redirects to an authorization dialog. If the user is not logged in, he or she will be asked to authenticate If the user has not authorized the application he or she will be asked to do so The user is then redirected to the redirection url provided in the first request. Here two things can happen...
  • 14. Server side or Implicit Either the redirection url leads to a server controlled by the client application developer that takes the provided code parameter and exchanges it for an access token by posting the code to an access token url. This is referred to as the server side flow. or The access token is appended as a fragment in the redirection URL. This method allows applications without any server component to receive an access_token with ease. It is used by my demo application and is being referred to as the implicit flow. A user can at any time explicitly revoke an authorization and render the obtained access token useless. Some Service Providers, such as Facebook, also invalidate access tokens after a certain time.
  • 16. Demo Getting Instagram data based on GPS position
  • 17.
  • 18.
  • 19. Demo Clone source Login to Instagram Register a client Copy client id and secret to app Test
  • 20. Test cases Not logged into Instagram, Not authorized client Logged into Instagram, Authorized client Logged into Instagram, Not authorized client
  • 22. OAuth 2.0 _"OAuth 2.0 is the next evolution of the OAuth protocol and is not backward compatible with OAuth 1.0. OAuth 2.0 focuses on client developer simplicity while providing specific authorization flows for web applications, desktop applications, mobile phones, and living room devices. The specification is being developed[2] within the IETF OAuth WG and was expected to be finalized by the end of 2010 according to Eran Hammer.[3] However, due to discording views about the evolution of OAuth, Hammer left the working group[4]"_ _"Facebook's new Graph API only supports OAuth 2.0 and is the largest implementation of the emerging standard.[5] As of 2011, both Google[6] and Microsoft[7] had added OAuth 2.0 experimental support to their APIs."_ Source: Wikipedia
  • 23. Critique _"When compared with OAuth 1.0, the 2.0 specification is more complex, less interoperable, less useful, more incomplete, and most importantly, less secure."_ Eran Hammer one of the leaders of the effort describes how he, and OAuth, failed. [OAuth 2.0 and the Road to Hell] _"At the core of the problem is the strong and unbridgeable conflict between the web and the enterprise worlds. The OAuth working group at the IETF started with strong web presence. But as the work dragged on (and on) past its first year, those web folks left along with every member of the original 1.0 community. The group that was left was largely all enterprise… and me."_ Source: [OAuth 2.0 and the Road to Hell](http://hueniverse.com/ 2012/07/oauth-2-0-and-the-road-to-hell/), July, 2012
  • 24. Service Providers ... Dropbox Instagram Facebook Microsoft Flickr LinkedIn Foursquare Netflix Github Tumblr Google Twitter

Hinweis der Redaktion

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n