谷歌oauth2 redirect_uri与几个参数
如何添加一个参数到谷歌oauth2 redirect_uri?
就像这个redirect_uri=http://www.example.com/redirect.html?a=b
。
a=b
是随机的。
任何人都可以帮忙
-
你不能添加任何东西的redirecturi,redirecturi是不变的在Oauth的应用程序设置中设置。 例如: http : //www.example.com/redirect.html
-
要传递几个参数到你的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在这里:
如果你在.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是我想要参数响应的参数