我的客户端是基于Web的NodeJS服务器。
我最近使用此流程为服务器端应用实施了Google登录
请参阅https://developers.google.com/identity/sign-in/web/server-side-flow
我现在正尝试在Facebook上实现类似的功能,但是当我查看文档时,没有提及oauth2。
https://developers.facebook.com/docs/facebook-login
我应该使用Facebook连接吗?我在哪里可以得到我的"一次性代码"从而我可以将它发送到我的服务器?
关于这个问题很多混乱。一些方向将是最受欢迎的。
答案 0 :(得分:4)
OAuth在设计上并不是一个非常规范的标准。它描述了进行授权的各种流程,并且每个流程都被广泛指定,以提供多种解释和实现。
Facebook的实施与谷歌大致相似,并支持许多不同的流程。 Javascript SDK提供了一种在浏览器中执行此操作的方法,而更传统的server-side flow使用了一系列重定向,并且不需要任何Javascript。 Facebook流程并不真正称自己为 OAuth ,尽管后者暗中提到它。你问过一次"一次性代码"。这是the OAuth2 specification第4.1节中描述的授权代码流程的一部分。上面描述的服务器端Facebook流程似乎非常接近规范,文档描述了如何获取此代码并将其交换为访问令牌。您可以使用重定向来执行此操作,或者您可以编写一些Javascript来在XHR中命中该端点,然后自己提取代码并将其传递给服务器。
但你也可以使用Javascript SDK做同样的事情。它基于规范4.2节中描述的隐式,浏览器驱动的流程。在这种情况下,将向客户端发出一个短期访问令牌。但是,它可以将该令牌发送到服务器,然后服务器可以将其交换为长期访问令牌,类似于一次性代码的用例。该过程在Javascript SDK文档中为described。
所有这一切都是说我不会过分关注什么是或不是" OAuth"。这些授权服务中的大多数都基于相同的基本OAuth概念,但由于规范非常通用,因此它们的工作方式完全不同。只需确定哪种流程最适合您的应用程序并使用它。