TF-EMC2 Tuesday, February 15 th, 2011 Brook Schofield Project Development Officer Slide 1
›LinkedIn ›Business/Professional Contact Directory ›OAuth ›MySpace ›2 nd Place to Facebook ›OAuth ›Windows Live ID (Messanger Connect) ›Big User Base (Hotmail, MSN) ›Tried OpenID (then stopped) ›Uses OAuth-WRAP (prelude to OAuth 2.0) Slide 2
›I’ve previously patched Twitter + Facebook › Copy + Paste Andreas’ authtwitter module ›…but Twitter is sloppy! ›OAuth handling is very lax ›authtwitter is a bad example :-( ›Shared Data Structure came back to bite me. ›LinkedIn is very strict! ›Two main components for an authsource ›lib/source/AuthSource.php ›authenticate() and finalStep() ›linkback.php ›Calls finalStep() Slide 3
›2 nd big Social Networking Platform. ›Just opened an Australian office. ›Wasn’t for Sale. Slide 4
›Very good dev tools + REST web client. Slide 5
›OAuth ›…but very strict ›Required POST rather than GET + HEADERS Slide 6
Slide 7
› ›POST (current code uses a GET) ›Callback should be here! › te?oauth_token=94ab03c4-ae2c-45e e6c4899db63https:// te?oauth_token=94ab03c4-ae2c-45e e6c4899db63 ›REDIRECT ›Twitter puts the Callback here :-( › ›POST (current code uses a GET) › ›GET (API to return user data) ›Set Header: x-li-format: json for JSON response Slide 8
›AKA Messenger Connect Slide 9
Slide 10
›50k PHP Library from Microsoft – but replaced it with… ›$authorizeURL = ' ›. '?wrap_client_id='. $this->key ›. '&wrap_callback='. ›urlencode(SimpleSAML_Module::getModuleUrl('authwindowslive') ›. '/linkback.php') ›. '&wrap_client_state='. urlencode($stateID) ›. '&wrap_scope=WL_Profiles.View,Messenger.SignIn’ ›; ›parse_str($result, $response); Slide 11
ReturnedGenerated Myspace: displayName, hasApp, id, msUserType, familyName, givenName, profileUrl, thumbnailUrl LinkedIn: summary, headline, id, lastName, specialties, pictureUrl, firstName Windows Live ID: BaseUri, Id, SelfLink, Title, Updated, AllContactsLink, Cid, FirstName, LastName MyActivitiesLink, StatusMessageLink, UxLink, _mail (generated format) _targetedID _uid _user _username Slide 12
Slide 13 ›Not unless it’s in simpleSAMLphp ›TERENA Policy? ›Dyonisius Policy? ›Encourages Collaboration! ›If it’s good enough for TERENA it should be good enough for the community! ›Dyonisius will tell you later today how it works.
Slide 14 ›Why no Generic OAuth? ›Data APIs too specific ›OpenID 3.0 Connect ›OpenID 2.0 isn’t really there either. ›OAuth 2.0 ›Facebook Graph API
Slide 15
facebook.com/brook.schofield linkedin.com/in/brookschofield Slide 16