谷歌oauth2 redirect_uri与几个参数

如何添加一个参数到谷歌oauth2 redirect_uri?

就像这个redirect_uri=http://www.example.com/redirect.html?a=b

a=b是随机的。

任何人都可以帮忙

  1. 你不能添加任何东西的redirecturi,redirecturi是不变的在Oauth的应用程序设置中设置。 例如: http : //www.example.com/redirect.html

  2. 要传递几个参数到你的redirect uri中,在调用Oauth url之前把它们存储在state参数中,授权后的url会将相同的参数发送到你的redirect uri中,如state=THE_STATE_PARAMETERS

所以对于你的情况,这样做:

/ 1。 创build你的参数的JSONstring – >

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

/ 2。 做一个base64UrlEncode,使URL安全 – >

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

这是base64UrlEncoding&解码( http://en.wikipedia.org/wiki/Base64#URL_applications )的PHP示例:

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

所以现在状态会是这样的:stateString – > asawerwerwfgsg,

在OAuth授权url中传递此状态:

 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, 

对于服务器端的stream程,它会附带令牌: http : //www.example.com/redirect.html? token = sdfwerwqerqwer&state= asdafwswdwefwsdg ,

对于客户端stream程,它将随访问令牌一起进入散列: http : //www.example.com/redirect.html#access_token=portyefghsdfgdfgsdgd&state=asdafwswdwefwsdg ,

检索状态,base64Url解码,json_decode,你有你的数据。

查看更多关于谷歌OAuth 2在这里:

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

如果你在.NET中,你可以保存会话中的参数

 HttpContext.Current.Session[{varname}] 

并redirect到没有参数的授权页面

 Response.Redirect(your_uri_approved_with_no_querystring_parameters); 

你可以用下面的urlredirect参数,

当你从谷歌的反应比你可以传递参数与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 = page / view是我想要参数响应的参数