Skip to content
Snippets Groups Projects
Commit dbd9cea5 authored by Andreas Åkre Solberg's avatar Andreas Åkre Solberg
Browse files

Adding Twitter Authentication module. Implements the OAuth Authentication API of Twitter

git-svn-id: https://simplesamlphp.googlecode.com/svn/trunk@1498 44740490-163a-0410-bde0-09ae8108e29a
parent b1d15f3d
No related branches found
No related tags found
No related merge requests found
Using the Facebook authenticatio source with simpleSAMLphp
==========================================================
Remember to configure `authsources.php`, with both API key and secret.
To get an API key and a secret, register the application at:
* <http://www.facebook.com/developers/>
Set the callback URL to be:
* `http://idp.example.org/simplesaml/module.php/authfacebook/linkback.php?next=`
Replace `idp.example.org` with your hostname.
<?php
/**
* Authenticate using Twitter.
*
* @author Andreas Åkre Solberg, UNINETT AS.
* @package simpleSAMLphp
* @version $Id$
*/
class sspmod_authtwitter_Auth_Source_Twitter extends SimpleSAML_Auth_Source {
/**
* The string used to identify our states.
*/
const STAGE_INIT = 'twitter:init';
/**
* The key of the AuthId field in the state.
*/
const AUTHID = 'twitter:AuthId';
private $key;
private $secret;
/**
* Constructor for this authentication source.
*
* @param array $info Information about this authentication source.
* @param array $config Configuration.
*/
public function __construct($info, $config) {
assert('is_array($info)');
assert('is_array($config)');
/* Call the parent constructor first, as required by the interface. */
parent::__construct($info, $config);
if (!array_key_exists('key', $config))
throw new Exception('Twitter authentication source is not properly configured: missing [key]');
$this->key = $config['key'];
if (!array_key_exists('secret', $config))
throw new Exception('Twitter authentication source is not properly configured: missing [secret]');
$this->secret = $config['secret'];
// require_once(dirname(dirname(dirname(dirname(__FILE__)))) . '/extlibinc/facebook.php');
}
/**
* Log-in using Facebook platform
*
* @param array &$state Information about the current authentication.
*/
public function authenticate(&$state) {
assert('is_array($state)');
/* We are going to need the authId in order to retrieve this authentication source later. */
$state[self::AUTHID] = $this->authId;
$stateID = SimpleSAML_Auth_State::saveState($state, self::STAGE_INIT);
// SimpleSAML_Logger::debug('facebook auth state id = ' . $stateID);
$consumer = new sspmod_oauth_Consumer($this->key, $this->secret);
// Get the request token
$requestToken = $consumer->getRequestToken('http://twitter.com/oauth/request_token');
SimpleSAML_Logger::debug("Got a request token from the OAuth service provider [" .
$requestToken->key . "] with the secret [" . $requestToken->secret . "]");
$oauthState = array(
'requestToken' => $requestToken,
'stateid' => $stateID,
);
$session = SimpleSAML_Session::getInstance();
$session->setData('oauth', 'oauth', $oauthState);
// Authorize the request token
$consumer->getAuthorizeRequest('http://twitter.com/oauth/authenticate', $requestToken);
}
public function finalStep(&$state) {
$requestToken = $state['requestToken'];
$consumer = new sspmod_oauth_Consumer($this->key, $this->secret);
// Replace the request token with an access token
$accessToken = $consumer->getAccessToken('http://twitter.com/oauth/access_token', $requestToken);
SimpleSAML_Logger::debug("Got an access token from the OAuth service provider [" .
$accessToken->key . "] with the secret [" . $accessToken->secret . "]");
$userdata = $consumer->getUserInfo('http://twitter.com/account/verify_credentials.json', $accessToken);
$attributes = array();
foreach($userdata AS $key => $value) {
if (is_string($value))
$attributes[$key] = array((string)$value);
}
if (array_key_exists('screen_name', $userdata) )
$attributes['eduPersonPrincipalName'] = array('@' . $userdata['screen_name']);
if (array_key_exists('name', $userdata) )
$attributes['displayName'] = array($userdata['name']);
if (array_key_exists('profile_image_url', $userdata) )
$attributes['jpegPhoto'] = array(base64_encode(file_get_contents($userdata['profile_image_url'])));
if (array_key_exists('url', $userdata) )
$attributes['labeledURI'] = array($userdata['url']);
$state['Attributes'] = $attributes;
}
}
?>
\ No newline at end of file
<?php
/**
* Handle linkback() response from Twitter.
*/
sspmod_oauth_Consumer::dummy();
// $config = SimpleSAML_Configuration::getInstance();
$session = SimpleSAML_Session::getInstance();
$oauthState = $session->getData('oauth', 'oauth');
if (empty($oauthState)) throw new Exception('Could not load oauthstate');
if (empty($oauthState['stateid'])) throw new Exception('Could not load oauthstate:stateid');
$stateId = $oauthState['stateid'];
// echo 'stateid is ' . $stateId;
$state = SimpleSAML_Auth_State::loadState($stateId, sspmod_authtwitter_Auth_Source_Twitter::STAGE_INIT);
$state['requestToken'] = $oauthState['requestToken'];
/* Find authentication source. */
assert('array_key_exists(sspmod_authtwitter_Auth_Source_Twitter::AUTHID, $state)');
$sourceId = $state[sspmod_authtwitter_Auth_Source_Twitter::AUTHID];
$source = SimpleSAML_Auth_Source::getById($sourceId);
if ($source === NULL) {
throw new Exception('Could not find authentication source with id ' . $sourceId);
}
$config = SimpleSAML_Configuration::getInstance();
$source->finalStep($state);
SimpleSAML_Auth_Source::completeAuth($state);
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment