Відповіді:
Ви не можете нічого додати до ури переадресації, урі переадресації є постійною, як встановлено в налаштуваннях програми Oauth. наприклад: http://www.example.com/redirect.html
Щоб передати декілька параметрів state
урі- переспрямування, зберегти їх у параметрі перед тим, як викликати URL-адресу Oauth, URL-адреса після авторизації надішле вам ті ж параметри, що й урі-переспрямування, як
state=THE_STATE_PARAMETERS
Тож для вашого випадку зробіть це:
/ 1. створити рядок json своїх параметрів ->
{ "a" : "b" , "c" : 1 }
/ 2. зробіть base64UrlEncode, щоб зробити його URL безпечним ->
stateString = base64UrlEncode('{ "a" : "b" , "c" : 1 }');
Це приклад PHP базового64UrlEncoding & декодування ( http://en.wikipedia.org/wiki/Base64#URL_applications ):
function base64UrlEncode($inputStr)
{
return strtr(base64_encode($inputStr), '+/=', '-_,');
}
function base64UrlDecode($inputStr)
{
return base64_decode(strtr($inputStr, '-_,', '+/='));
}
Отже, стан стане чимось на зразок: stateString -> asawerwerwfgsg,
Передайте цей стан у URL-адресу авторизації 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,
Для сторони сервера він буде поставлений разом з маркером: http://www.example.com/redirect.html?token=sdfwerwqerqwer&state=asdafwswdwefwsdg ,
Для клієнтського потоку він надходить у хеш разом із маркером доступу: http://www.example.com/redirect.html#access_token=portyefghsdfgdfgsdgd&state=asdafwswdwefwsdg ,
Отримайте стан, base64UrlDecode, json_decode, і у вас є ваші дані.
Детальніше про google OAuth 2 дивіться тут:
state
парам для передачі декількох параметрів для перенаправлення урі та одночасного запобігання CSRF
атаці ?
CSRF
атакам)?
Якщо ви перебуваєте в .NET, ви можете зберегти параметри в сесії
HttpContext.Current.Session[{varname}]
і перенаправити на сторінку авторизації без параметрів
Response.Redirect(your_uri_approved_with_no_querystring_parameters);
Session
слід уникати.
Ви можете перенаправити параметр за допомогою URL-адреси, як показано нижче,
Коли ви отримаєте відповідь від google, ніж можете передати параметр з URL,
Дивіться нижче php- код для того ж,
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');
}
У наведеному вище прикладі r = сторінка / view - це параметр, на який я хочу відповідь з параметром