web-dev-qa-db-fra.com

google oauth2 redirect_uri avec plusieurs paramètres

Comment ajouter un paramètre à google oauth2 redirect_uri?

Juste comme ça redirect_uri=http://www.example.com/redirect.html?a=b.

Le b de a=b est aléatoire.

Quelqu'un peut aider?

109
eason
  1. Vous ne pouvez rien ajouter à l'URI de redirection. La redirection d'URI est constante, comme défini dans les paramètres d'application de Oauth. par exemple: http://www.example.com/redirect.html

  2. Pour transmettre plusieurs paramètres à votre URI de redirection, stockez-les dans le paramètre state avant d'appeler Oauth url, l'URL après autorisation enverra les mêmes paramètres à votre redirection d'URI sous la forme state=THE_STATE_PARAMETERS

Donc pour votre cas, faites ceci:

/1. créer une chaîne json de vos paramètres ->

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

/ 2. faire un base64UrlEncode, pour le rendre sûr URL ->

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

Ceci est un PHP exemple de base64UrlEncoding & decoding ( http://fr.wikipedia.org/wiki/Base64#URL_applications ) :

function base64UrlEncode($inputStr)
{
    return strtr(base64_encode($inputStr), '+/=', '-_,');
}

function base64UrlDecode($inputStr)
{
    return base64_decode(strtr($inputStr, '-_,', '+/='));
}

Alors maintenant, l'état serait quelque chose comme: stateString -> asawerwerwfgsg,

Passez cet état dans OAuth URL d'autorisation:

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,

Pour le flux côté serveur, il sera accompagné du jeton: http://www.example.com/redirect.html?token=sdfwerwqerqwer&state=asdafwswdwefwsdg ,

Pour le flux côté client, il entrera dans le hachage avec le jeton d'accès: http://www.example.com/redirect.html#access_token=portyefghsdfgdfgsdgd&state=asdafwswdwefwsdg ,

Récupérez l'état, base64UrlDecode, json_decode, et vous avez vos données.

Plus d'informations sur Google OAuth 2 ici:

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

219
DhruvPathak

Si vous êtes dans .NET, vous pouvez enregistrer les paramètres dans la session.

HttpContext.Current.Session[{varname}]

et rediriger vers la page d'autorisation sans paramètres

Response.Redirect(your_uri_approved_with_no_querystring_parameters);
5
rufo

Vous pouvez rediriger le paramètre avec l'URL comme ci-dessous,

Lorsque vous obtenez une réponse de Google, vous pouvez transmettre le paramètre avec l'URL,

Voir ci-dessous php code pour la même chose,

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');

}

Dans l'exemple ci-dessus r = page/vue est le paramètre sur lequel je veux la réponse avec paramètre

2
Kiran