Answers:
您无法在重定向uri中添加任何内容,重定向uri是Oauth应用程序设置中设置的常量。例如:http : //www.example.com/redirect.html
要将多个参数传递给您的重定向uri,请state
在调用Oauth网址之前将其存储在参数中,授权后的网址将向您的重定向uri发送相同的参数
state=THE_STATE_PARAMETERS
因此,对于您的情况,请执行以下操作:
/ 1。创建参数的json字符串->
{ "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,
对于服务器端流程,它将附带令牌: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
param传递几个参数来重定向uri并防止同时发生CSRF
攻击?
CSRF
攻击)?
如果您使用的是.NET,则可以将参数保存在Session中
HttpContext.Current.Session[{varname}]
并重定向到不带参数的授权页面
Response.Redirect(your_uri_approved_with_no_querystring_parameters);
Session
应避免将任何客户端状态存储在IMO中。
您可以使用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 = page / view是参数,我要在该参数上使用参数