OAuth 2.0 状态参数

OAuth 2.0 State Parameter

我正在使用 eBay API 在我当前的 Meteor 项目应用程序上使用 OAuth。

我可以在该应用程序的一个部分创建一个 eBay 帐户资料,并为该帐户分配自定义值(例如昵称等)。这是我启动 OAuth 登录重定向过程的地方。

我的问题是关于令牌请求中的 'state' 参数。我知道这是为了帮助防止 CSRF,但我必须那样使用它吗? 'state' 似乎是可选的。

假设我想将另一个值传递到请求调用中,例如字符串 'eBay Seller',并期望在响应中返回完全相同的字符串。我想使用该值来帮助我的应用程序确定将返回的令牌分配给哪个帐户(基于哪个帐户配置文件启动了重定向 link)。

'state' 是否是传递变量的有效位置,我希望该变量返回时与发送的完全一样?我考虑过使用 Session 变量来处理这种情况,但很快意识到这行不通,因为 OAuth 过程将我带到了我的项目域之外。

OAuth 是否支持传递预期在发送时返回的变量?将我的变量发送为 'state' 允许甚至推荐(或 绝对不推荐 ?)是否有更好的方法来实现我想做的事情而不涉及更新数据库值?

谢谢!

您可以发送您想要的 state。不过,您应该尝试确保它不可猜测,以减轻 CSRF 攻击。

如果你想要return有用的信息,比如'ebay seller',那么包括一些用于CSRF的东西(例如会话密钥ID的散列)文本'ebay seller' 并分隔它们,例如

2CF24DBA5FB0A30E26E83B2AC5B9E29E1B161E5C1FA7425E73043362938B9824|ebay seller

现在您可以两全其美:有用的状态信息 + CSRF 保护。 您的重定向端点逻辑可以检查会话 ID 匹配的哈希值,还可以从初始请求中确认帐户类型。