google oauth2 redirect_uri с несколькими параметрами - PullRequest
105 голосов
/ 11 октября 2011

Как добавить параметры в google oauth2 redirect_uri?

Точно так же redirect_uri=http://www.example.com/redirect.html?a=b.

b из a=b является случайным.

Кто-нибудь может помочь?

Ответы [ 3 ]

214 голосов
/ 11 октября 2011
  1. Вы не можете ничего добавить к URI перенаправления, URI перенаправления является постоянным, как установлено в настройках приложения Oauth.Например: http://www.example.com/redirect.html

  2. Чтобы передать несколько параметров в ваш URI перенаправления, сохраните их в параметре state перед вызовом Oauth url, URL после авторизации отправит те же параметры в ваш URI перенаправления, что иstate=THE_STATE_PARAMETERS

Итак, для вашего случая сделайте следующее:

/ 1.создайте строку параметров json ->

{ "a" : "b" , "c" : 1 }

/ 2.сделать base64UrlEncode, чтобы сделать его URL безопасным ->

stateString = base64UrlEncode('{ "a" : "b" , "c" : 1 }');

Это пример PHP 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, '-_,', '+/='));
}

Так что теперь состояние будетбыть что-то вроде: 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,

Получите состояние, base64UrlДекодируйте его, json_decode, и у вас есть ваши данные.

Подробнеео Google OAuth 2 здесь:

http://code.google.com/apis/accounts/docs/OAuth2.html

5 голосов
/ 14 июля 2012

Если вы находитесь в .NET, вы можете сохранить параметры в сеансе

HttpContext.Current.Session[{varname}]

и перенаправить на страницу авторизации без параметров

Response.Redirect(your_uri_approved_with_no_querystring_parameters);
2 голосов
/ 24 сентября 2014

Вы можете перенаправить параметр с помощью 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 = страница / представление - это параметр, для которого я хочу получить ответ с параметром

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...