NAME
LWP::Authen::OAuth - generate signed OAuth requests
SYNOPSIS
require
LWP::Authen::OAuth;
# Google uses 'anonymous' for unregistered Web/offline applications or the
# domain name for registered Web applications
my
$ua
= LWP::Authen::OAuth->new(
oauth_consumer_secret
=>
"anonymous"
,
);
# request a 'request' token
[
oauth_consumer_key
=>
'anonymous'
,
xoauth_displayname
=>
'Example Application'
,
]
);
die
$r
->as_string
if
$r
->is_error;
# update the token secret from the HTTP response
$ua
->oauth_update_from_response(
$r
);
# open a browser for the user
# data are returned as form-encoded
my
$uri
= URI->new(
'http:'
);
$uri
->query(
$r
->content );
my
%oauth_data
=
$uri
->query_form;
# Direct the user to here to grant you access:
# oauth_token=$oauth_data{oauth_token}\n";
# turn the 'request' token into an 'access' token with the verifier
# returned by google
oauth_consumer_key
=>
'anonymous'
,
oauth_token
=>
$oauth_data
{oauth_token},
oauth_verifier
=>
$oauth_verifier
,
]);
# update the token secret from the HTTP response
$ua
->oauth_update_from_response(
$r
);
# now use the $ua to perform whatever actions you want
Sending status updates to a single account is quite easy if you create an application. The oauth_consumer_key
and oauth_consumer_secret
come from the 'Application Details' page and the oauth_token
and oauth_token_secret
from the 'My Access Token' page.
my
$ua
= LWP::Authen::OAuth->new(
oauth_consumer_key
=>
'xxx1'
,
oauth_consumer_secret
=>
'xxx2'
,
oauth_token
=>
'yyy1'
,
oauth_token_secret
=>
'yyy2'
,
);
status
=>
'Posted this using LWP::Authen::OAuth!'
]);
DESCRIPTION
This module provides a sub-class of LWP::UserAgent that generates OAuth 1.0 signed requests. You should familiarise yourself with OAuth at http://oauth.net/.
This module only supports HMAC_SHA1 signing.
OAuth nonces are generated using the Perl random number generator. To set a nonce manually define 'oauth_nonce' in your requests via a CGI parameter or the Authorization header - see the OAuth documentation.
METHODS
- $ua = LWP::Authen::OAuth->new( ... )
-
Takes the same options as "new" in LWP::UserAgent plus optionally:
oauth_consumer_key
oauth_consumer_secret
oauth_token
oauth_token_secret
Most services will require some or all of these to be set even if it's just 'anonymous'.
- $ua->oauth_update_from_response( $r )
-
Update the
oauth_token
andoauth_token_secret
from an HTTP::Response object returned by a previous request e.g. when converting a request token into an access token. - $key = $ua->oauth_consumer_key( [ KEY ] )
-
Get and optionally set the consumer key.
- $secret = $ua->oauth_consumer_secret( [ SECRET ] )
-
Get and optionally set the consumer secret.
- $token = $ua->oauth_token( [ TOKEN ] )
-
Get and optionally set the oauth token.
- $secret = $ua->oauth_token_secret( [ SECRET ] )
-
Get and optionally set the oauth token secret.
SEE ALSO
LWP::UserAgent, MIME::Base64, Digest::SHA, URI, URI::Escape
Rationale
I think the complexity in OAuth is in the parameter normalisation and message signing. What this module does is to hide that complexity without replicating the higher-level protocol chatter.
In Net::OAuth:
$r
= Net::OAuth->request(
'request token'
)->new(
consumer_key
=>
'xxx'
,
...
extra_params {
scope
=>
'global'
,
}
);
$r
->sign;
$res
=
$ua
->request(POST
$r
->to_url);
$res
= Net::OAuth->response(
'request token'
)
->from_post_body(
$res
->content);
... etc
In LWP::Authen::OAuth:
$ua
= LWP::Authen::OAuth->new(
oauth_consumer_key
=>
'xxx'
);
...
scope
=>
'global'
,
]);
$ua
->oauth_update_from_response(
$res
);
... etc
AUTHOR
Timothy D Brody <tdb2@ecs.soton.ac.uk>
Copyright 2011 University of Southampton, UK
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself