首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >带几个参数的谷歌OAuth 2.0 redirect_uri

带几个参数的谷歌OAuth 2.0 redirect_uri
EN

Stack Overflow用户
提问于 2011-10-11 14:17:11
回答 5查看 107.2K关注 0票数 144

如何向谷歌OAuth 2.0 redirect_uri添加参数

就像这样:

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

a=bb是随机的。

有人能帮上忙吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-10-11 14:22:35

  1. 您不能向重定向uri添加任何内容,重定向uri是在应用程序设置中设置的常量。例如:http://www.example.com/redirect.html
  2. To将几个参数传递给您的重定向uri,在调用Oauth url之前将它们存储在state参数中,授权后的url将向您的重定向uri发送与Oauth相同的参数。

因此,对于您的情况,请执行以下操作:

/1。创建参数->的json字符串

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

/2。执行base64UrlEncode,使其成为安全的->

代码语言:javascript
复制
stateString = base64UrlEncode('{ "a" : "b" , "c" : 1 }');

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

代码语言:javascript
复制
function base64UrlEncode($inputStr)
{
    return strtr(base64_encode($inputStr), '+/=', '-_,');
}

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

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

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

代码语言:javascript
复制
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它,你就有了你的数据。

有关谷歌OAuth 2的更多信息,请点击此处:

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

票数 266
EN

Stack Overflow用户

发布于 2020-08-14 16:29:08

由于公认的答案确实公开了实际数据并滥用了state参数,而不是坚持使用nonce来防止CSRF,因此我将尝试显示一个适当的方法。而不是传递(读暴露)数据,它应该保存在本地。在请求之前对其进行水合,并在经过验证的请求之后重新对其进行水合。这里的"Validated“是指请求和响应的state-nonce匹配。

您需要某种临时客户端存储。例如,对于SPA或一般网站,将其保持在状态或使用浏览器的localStorage、会话(或签名cookie)。对于移动应用程序,他们应该使用内存或任何其他本地存储。

在发送请求之前,生成一个现时值(见下文),它将用作请求的state参数。将nonce与自定义状态(例如json)一起存储在本地存储中。

例如,现时值可以是ih4f984hf,自定义状态可以是{"role": "customer"}。然后,您可以存储数据以便为该请求重新水合,如下所示:

代码语言:javascript
复制
"ih4f984hf": {
  "role": "customer"
}

然后,只使用的随机数作为请求的state参数值。(如果您绝对希望将随机数和数据组合到state值中,请确保对其进行加密,并注意该值的长度是有限制的!)

当接收到响应时,您将获得state参数的值。查找它,如果它与本地存储中的值匹配,则可以使用存储的状态处理数据。如果随机数不匹配,则请求可能来自攻击者,因此不应进行处理。

生成随机数的

记住,nonce的本质是它只能使用一次,并且必须是不可预测的!不可预测在这里意味着理想的随机,但实际上伪随机是可以的,如果熵足够高-在web应用程序中,你可能想检查Web API Crypto,它的supported很好。

对于进一步的阅读,这可能是有帮助的:

票数 5
EN

Stack Overflow用户

发布于 2012-07-14 19:01:14

如果您在.NET中,则可以将参数保存在会话中

代码语言:javascript
复制
HttpContext.Current.Session[{varname}]

并重定向到不带参数的授权页面

代码语言:javascript
复制
Response.Redirect(your_uri_approved_with_no_querystring_parameters);
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7722062

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档