Google OAuth响应查询字符串可以包含未编码的字符吗?

时间:2018-11-29 18:43:37

标签: google-oauth

我刚遇到一个问题,尽管身份验证成功,但OAuth中间件Grant有时会引发从google oauth端点重定向回中间件端点的错误。

经过一些研究,我意识到,如果浏览器中没有活动的Google会话(未使用google.com登录),则重定向网址的查询字符串已正确编码,并且一切正常。

  

http://localhost:1337/connect/google/callback?code=4%2FpAD2TUmE0hgckmSwkxxx&scope=openid%20email%20https://www.googleapis.com/auth/userinfo.email%20https://www.googleapis.com/auth/plus.me

但是,如果已经有用户登录,则查询字符串的 code 参数是未编码的,这会在我的oauth中间件上引发malformed_auth_token错误。

  

http://localhost:1337/connect/google/callback?code=4/pAD2TUmE0hgckmSwkxxx&scope=openid%20email%20https://www.googleapis.com/auth/userinfo.email%20https://www.googleapis.com/auth/plus.me

我进一步使用不同的帐户进行了测试,并且Google端点返回的每个代码令牌都包含一个正斜杠作为第二个字符。

所以我想知道,如果google出现错误并且错误地返回了未编码的参数,或者oauth中间件是否应该同时处理编码和未编码的参数?

1 个答案:

答案 0 :(得分:1)

Google没有错误。

可以在查询参数中包含斜杠字符。查询参数中的斜杠不需要编码。 Apache具有必须启用的指令以支持带有编码的斜杠字符(AllowEncodedSlashes)的查询参数。您的后端将需要处理这种情况。

但是,我确实发现您的示例很奇怪,其中Google有时会在code参数中编码斜杠字符。我知道在Google OAuth 2.0中有时会将code参数手动复制到输入字段中以完成OAuth流。对于这种情况,我总是看到斜杠字符为原始字符(未编码)。这是因为redirect_uriredirect_uri=urn:ietf:wg:oauth:2.0:oob