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