oauth-2.0 - Fitbit授权后如何识别应用程序用户
问题描述
假设我们的应用程序数据库中用户 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 的工作方式似乎存在一些误解。
在您的问题中,您使用了callback一词,好像 Fitbit 服务器将向该 URL 发出 HTTP 请求,但这不是它的工作方式。发生的情况是,显示 Fitbit 授权页面的用户代理收到带有包含重定向 URIHTTP 302 Found
的标头的响应。Location
所以它是响应而不是回调,它指示用户代理加载Location
标头中指定的 URI(如果用户代理是浏览器,它会加载)。
通常,您会redirect_uri
在应用程序中设置一个页面,您的用户已经登录,以便您可以从会话数据中识别用户 ID(就像您在应用程序中的任何其他页面一样)
如果由于某种原因上述方法对您不起作用,那么您可以state
在将用户重定向到 Fitbit 的 OAuth 2.0 授权页面时使用查询参数。Fitbit 的“使用 OAuth 2.0”文档对state
参数的描述如下:
当用户被重定向回您的应用程序时,提供可能对您的应用程序有用的任何状态。此参数将完全按照您的应用程序指定的方式添加到重定向 URI。
该state
参数是 OAuth 2.0 的标准功能,因此不是 Fitbit 特定的。它可以与根据RFC 6749正确实现 OAuth 2.0 的任何服务一起使用。
推荐阅读
- bash - 在 bash 中使用间接引用来做数组的更优雅的方法
- python - Numpy 一次将数组与多个标量进行比较
- uncrustify - Uncrustify 保证函数参数与左括号对齐
- portlet - Liferay 7.0 Portlet 重启后无法正确部署
- python - 将图像转换为十进制值 [Python]
- android - 如何将此 JSON 放入房间 sql
- angular - Angular 5,同一页面上的两个组件
- java - 为闭包委托实现 methodMissing()
- asp.net - 如何将 ID 传递给控制器并使用它在模式上显示数据
- angular - 如何从Angular(5+)Renderer2中的所有子项中清除元素?