facebook - 我可以直接从我的服务器上的 FB.login 使用访问令牌吗?
问题描述
我想实现一个不执行传统 oauth 重定向的 Facebook 身份验证。它不能很好地与我的单页应用程序和 GraphQL API 配合使用。
在 JS 方面,我可以调用FB.login
来触发用户登录的对话框。如果成功,我会收到一个包含 anaccessToken
和 a的对象signedRequest
。
signedRequest
可以在服务器上解码,它为我吐出一个code
。我可以使用code
with/oauth/access_token
来获取accessToken
.
但是,我已经从响应中获得了accessToken
全部时间。FB.login
所以我的问题是:如果我一直都拥有访问令牌,那么我解码签名的请求有什么意义吗?
奖励:为什么 FB API 首先提供签名请求,为什么 oauth 默认重定向code
而不是转发accessToken
?
解决方案
是的,您可以直接在服务器上使用从客户端登录获得的令牌。
然而,它可能是一个短暂的,而服务器端登录流程应该立即为您提供一个长期的。如果您只需要在用户在您的页面上处于活动状态时执行 API 调用,那么短暂的调用可能就可以了。(它仍然可以通过服务器端 API 调用换成长期存在的,https://developers.facebook.com/docs/facebook-login/access-tokens/refreshing)
为什么 FB API 首先提供签名请求
它还包含更多信息,这可能对客户端应用程序有用(用户 ID、令牌到期、在旧的“Canvas”类型应用程序的情况下从外部传入数据),并且可能会节省一个额外的 API 调用得到这样的信息。https://developers.facebook.com/docs/reference/login/signed-request/
为什么oauth默认重定向代码而不是accessToken?
一般安全措施。直接包含在返回 URL 中的令牌很容易被嵌入在该页面上的第 3 方脚本窃取(广告服务器等也可能不时被黑客入侵),或者作为 HTTP 引荐来源网址的一部分泄露。
该code
参数需要您的应用程序机密,以便 API 调用将其交换为令牌,因此,如果代码以任何此类方式泄漏,其他任何人都无法使用它。
推荐阅读
- c# - 创建 .csv 文件时如何不跳过 Excel 中的空单元格
- reactjs - @material/button/_mixins.scss 中的 SCSS 编译问题
- jupyter-notebook - 让 jupyter 服务器长时间运行的最佳方法是什么?
- java - 用 Java 中的 PDFbox 替换或删除 PDF 中的文本
- maven - 使用 GMavenPlus 运行 spock groovy 测试以及来自 maven surefire 的 java junit 测试
- c# - 在 c# 中以异步方式启动多个“TASK”
- angular - Ionic Angular Mobile App:使用一个代码库创建可重用的插件或库
- c# - resx、designer 和 cs 文件如何在表单中传递值?
- typescript - 尽管在 api 调用中成功,但等待不返回结果 - Typescript
- python - 从列表列表创建嵌套字典