>假设我们的应用程序数据库中用户 ID 为 100 的用户使用端点 http://localhost/api/100/fitbit/authorize 启动 Fitbit 的 OAuth 2.0 授权,并通过回调 http://localhost/api/fitbit/callback 获得授权。
我们如何识别哪个用户获得了授权,以便我们可以存储访问令牌和刷新令牌?回调 URL 不能包含用户 ID 100,因为 Fitbit 配置不允许在重定向 URL 中使用额外的参数。
或者有没有其他方法可以识别授权用户?
关于OAuth 2.0的工作原理似乎存在一些误解。
在您的问题中,您使用了回调一词,就好像 Fitbit 服务器要向该 URL 发出 HTTP 请求一样,但这不是它的工作方式。发生的情况是,显示 Fitbit 授权页面的用户代理收到一个HTTP 302 Found
响应,其中包含包含重定向 URI 的Location
标头。因此,它是一个响应而不是回调,它指示用户代理加载Location
标头中指定的 URI(如果用户代理是浏览器,它会(。
通常,您会将redirect_uri
设置为应用程序中用户已登录的页面,以便您可以从会话数据中识别用户 ID(就像对应用程序中的任何其他页面所做的那样(
如果由于某种原因,上述方法对您不起作用,那么您可以在将用户重定向到 Fitbit 的 OAuth 2.0 授权页面时使用state
查询参数。Fitbit 的"使用 OAuth 2.0"文档对state
参数的描述如下:
提供在将用户重定向回应用程序时可能对应用程序有用的任何状态。此参数将完全按照应用程序指定的方式添加到重定向 URI 中。
state
参数是 OAuth 2.0 的标准功能,因此这不是 Fitbit 特有的。它可以与根据 RFC 6749 正确实现 OAuth 2.0 的任何服务一起使用。