In order to use oauth applications must specify the following properties:

Mandatory:
<myprovider>.identity - the oauth identity (e.g., service account email in Google Api's)
<myprovider>.credential - the private key used to sign requests, in pem format
oauth.endpoint - the endpoint to use for authentication (e.g., "http://accounts.google.com/o/oauth2/token" in Google Api's)
oauth.audience - the "audience" of the token request (e.g., "http://accounts.google.com/o/oauth2/token" in Google Api's)

Optional:
- each application may expose a Map<String,String> of additional claims to be added to the token request,
these should be annotated/named with "oauth.additional-claims"
oauth.signature-or-mac-algorithm  - the algorithms to use when signing the token request.

Running the live test:

mvn clean install -Plive\
 -Dtest.oauth.identity=<accout email>\
 -Dtest.oauth.credential=<accout pk in pem format>\
 -Dtest.oauth.endpoint=https://accounts.google.com/o/oauth2/token\
 -Dtest.jclouds.oauth.audience=https://accounts.google.com/o/oauth2/token\
 -Dtest.jclouds.oauth.signature-or-mac-algorithm=RS256\
 -Dtest.jclouds.oauth.scopes=https://www.googleapis.com/auth/prediction