10

根据 Google Oauth 2.0 文档的状态参数:

表示收到响应后可能对您的应用程序有用的任何状态。Google 授权服务器会往返此参数,因此您的应用程序会收到它发送的相同值。可能的用途包括将用户重定向到站点中的正确资源、nonce 和跨站点请求伪造缓解。

我想使用 state 参数来了解原始 oauth 请求是从哪个子域发起的。但是 redirect_state 参数似乎需要注册为“授权重定向 URI”之一的一部分。如果没有,我得到:

错误:redirect_uri_mismatch 请求中的重定向 URI:http ://my_server.com/complete/google-oauth2/?redirect_state=2与注册的重定向 URI 不匹配

我想要一个不需要在授权的重定向 URI 中注册每个可能的 redirect_state 值的解决方案,因为这不是很容易维护。想法?

4

1 回答 1

18

参数的名称是state(而不是redirect_state)!

根据谷歌文档的示例 OAuth 请求是 ->

https://accounts.google.com/o/oauth2/auth?
scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile&
state=%2Fprofile&
redirect_uri=https%3A%2F%2Foauth2-login-demo.appspot.com%2Fcode&
response_type=code&
client_id=812741506391.apps.googleusercontent.com&approval_prompt=force

请注意State参数和redirect_uri参数。我想你把两者混为一谈了。

编辑 - 见谷歌的这个链接。对状态参数和构建 Web 请求有很好的解释。

于 2013-05-07T05:43:57.470 回答