Facebook graph api 应用程序>;OAuth2服务器>;Facebook>;OAuth2服务器>;应用程序

Facebook graph api 应用程序>;OAuth2服务器>;Facebook>;OAuth2服务器>;应用程序,facebook-graph-api,oauth-2.0,Facebook Graph Api,Oauth 2.0,所以我有一个单页客户端应用程序 正常流量: 应用程序->OAuth2服务器->应用程序 我们有自己的OAuth2服务器,因此人们可以登录到应用程序并获得与用户实体相关联的访问令牌 我们的特殊流程.. 我们还有这个特殊的端点/oauth2/vendor/facebook/auth?client_id=Xredirect_uri= 应用程序[1]->OAuth2服务器[2]->Facebook[3]->OAuth2服务器[4]->应用程序[5] [2] : 我们对redirect_uri进行URL编

所以我有一个单页客户端应用程序

正常流量:

应用程序->OAuth2服务器->应用程序

我们有自己的OAuth2服务器,因此人们可以登录到应用程序并获得与用户实体相关联的访问令牌

我们的特殊流程..

我们还有这个特殊的端点/oauth2/vendor/facebook/auth?client_id=Xredirect_uri=

应用程序[1]->OAuth2服务器[2]->Facebook[3]->OAuth2服务器[4]->应用程序[5]

[2] : 我们对redirect_uri进行URL编码,并将其作为自定义参数传递给facebook,以便稍后重定向到

[3] :

我们将客户端重定向到facebook进行身份验证和Accept应用程序

[4] :

  • Facebook重定向到oauth服务器,我们得到“代码”
  • 我们请求访问令牌,我们得到访问令牌。这一切都发生在卷曲的幕后
  • 我们要求我们自己的API(对本地主机的内部API调用)使用自定义授权类型(我们根据oauth2规范命名),如下所示。这是使用客户机机密完成的,并且是使用CURL在幕后进行的
  • 我们重定向到最初提供的原始重定向uri
这是否也是facebook认证的一种适用方式


我们知道,这可以通过另一种方式完成,例如,浏览器首先请求facebook令牌,然后浏览器请求access_令牌,该令牌最终被传递到我们自己的oauth2端点进行进一步验证和处理,这是对客户端的两个请求,在我看来,这两个请求相当缓慢和繁琐。还是这样?

是的,这是一种可以接受的方式。这是所谓“联邦”的一个例子

联邦当然最为人所知的是它在年的实施。但是您也可以使用OAuth来实现,即使它的实现方式没有标准化。以前就已经做过,例如在

仅几句话:

在步骤4中,将Facebook代码交换为访问令牌和刷新令牌。然后你需要再打一个电话到Facebook,获取用户的个人资料(或者至少是他们的用户id)。您需要这样做,以便当用户稍后返回时,您知道它是同一个用户。 如果您计划稍后调用Facebook API(例如检查更新的配置文件),则需要将访问令牌和刷新令牌存储在授权服务器中,并与Facebook用户id关联

换句话说,你需要有一些内部机制,将Facebook用户id映射到你自己的内部用户id。如果您专门使用Facebook进行身份验证,则Facebook用户id和您的内部用户id可以相同。您可以使用内部映射表,也可以在Facebook用户id前面加上前缀,例如“Facebook:”。这类似于WS-Federation所称的原始颁发者

那么你说

我们要求我们自己的API(对本地主机的内部API调用)使用自定义授权类型(我们根据oauth2规范命名),如下所示。这是使用客户机机密完成的,并且是使用CURL在幕后进行的

听起来很奇怪。首先,您已经在授权服务器中。您当然可以调用内部函数而不必经过HTTP堆栈?这样会更有效率。此外,出于安全原因,请始终避免使用秘密的内部HTTP端点。不仅不需要它们,你还需要增加攻击面,你需要花时间保护它们