Risposte:
Non è possibile aggiungere nulla all'URI di reindirizzamento, l'URI di reindirizzamento è costante come impostato nelle impostazioni dell'app di Oauth. ad esempio: http://www.example.com/redirect.html
Per passare diversi parametri al tuo uri di reindirizzamento, memorizzali nel state
parametro prima di chiamare l'URL Oauth, l'URL dopo l'autorizzazione invierà gli stessi parametri al tuo uri di reindirizzamento come
state=THE_STATE_PARAMETERS
Quindi per il tuo caso, fai questo:
/ 1. crea una stringa json dei tuoi parametri ->
{ "a" : "b" , "c" : 1 }
/ 2. esegui un base64UrlEncode, per renderlo sicuro per l'URL ->
stateString = base64UrlEncode('{ "a" : "b" , "c" : 1 }');
Questo è un esempio PHP di base64UrlEncoding & decoding ( http://en.wikipedia.org/wiki/Base64#URL_applications ):
function base64UrlEncode($inputStr)
{
return strtr(base64_encode($inputStr), '+/=', '-_,');
}
function base64UrlDecode($inputStr)
{
return base64_decode(strtr($inputStr, '-_,', '+/='));
}
Quindi ora lo stato sarebbe qualcosa del tipo: stateString -> asawerwerwfgsg,
Passa questo stato nell'URL di autorizzazione OAuth:
https://accounts.google.com/o/oauth2/auth?
client_id=21302922996.apps.googleusercontent.com&
redirect_uri=https://www.example.com/back&
scope=https://www.google.com/m8/feeds/&
response_type=token&
state=asdafwswdwefwsdg,
Per il flusso lato server verrà fornito con il token: http://www.example.com/redirect.html?token=sdfwerwqerqwer&state=asdafwswdwefwsdg ,
Per il flusso lato client arriverà nell'hash insieme al token di accesso: http://www.example.com/redirect.html#access_token=portyefghsdfgdfgsdgd&state=asdafwswdwefwsdg ,
Recupera lo stato, base64UrlDecode it, json_decode it, e hai i tuoi dati.
Vedi di più su Google OAuth 2 qui:
state
param per passare diversi parametri per reindirizzare uri e per prevenire l' CSRF
attacco allo stesso tempo ?
CSRF
attacchi)?
Se sei in .NET puoi salvare i parametri in Session
HttpContext.Current.Session[{varname}]
e reindirizza alla pagina di autorizzazione senza parametri
Response.Redirect(your_uri_approved_with_no_querystring_parameters);
Session
dovrebbe essere evitata.
Puoi reindirizzare il parametro con l'URL come di seguito,
Quando ricevi una risposta da Google, puoi passare il parametro con l'URL,
Vedi sotto il codice php per lo stesso,
if (isset($_GET['code'])) {
$client->authenticate();
$_SESSION['token'] = $client->getAccessToken();
$redirect = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];
header('Location: ' . filter_var($redirect, FILTER_SANITIZE_URL) . '?r=page/view');
}
Nell'esempio sopra r = page / view è il parametro su cui voglio la risposta con il parametro