在网站和移动应用程序之间共享 Facebook 访问令牌

Posted

技术标签:

【中文标题】在网站和移动应用程序之间共享 Facebook 访问令牌【英文标题】:Shared Facebook Access Token between Website and Mobile Application 【发布时间】:2012-03-19 19:37:49 【问题描述】:

我想要一个网站(带有 Devise 和 Omniauth 的 Rails 3.1)和一个移动应用程序 (ios5) 来共享身份验证。我的意思是我希望用户能够使用 Facebook 访问网站,或使用 SSI 访问移动应用程序,并让移动应用程序使用用户的凭据与网站的 API 对话,以对网站进行身份验证。

我目前的 Web 端可以很好地与能够 SSI 到帐户的用户一起工作。我也有移动应用程序工作,支持用户 SSI。两者都使用相同的 Facebook 应用程序。

我的问题是找到可以用于移动应用程序对站点进行身份验证的两者之间共享的东西。显然两者都可以访问相同的用户 ID,但这似乎不是很安全。我的移动应用程序有一个访问令牌,但这与网站的访问令牌不同,尽管它们看起来很相似,而且我的移动访问令牌过期而我的网络访问令牌没有过期。

Web/Rails 令牌(非真实):

DDDAKnu1dg40BDHEWN0VDssxs8GGF8ZBEEOb38HnS0IUEQC1NSufmPCcGeFkTuw39ZDl7OhlZBD2jwJEqXdAZCtZBflJRQKZB4ZA

移动/iOS 令牌(非真实)

BDDAKnu1dg40BDEo3YjZD2hIwjfZB4slXJj3fmHfzLh5q1xZD0ShfJCb6PMjnApkpM0FTuGGvWnzZBQy4GZCMuysEEqhMz8YgruD53TXKTZC0GPFkfVe0b6fe8wieLLOZDDZA

使用 Facebook 的 access token debugger 我得到以下信息(令牌之间删除的所有内容都是相同的):

对于 Web/Rails 令牌:

App ID: 
XXXXXXXXXXXXXXXX : SomeAppName
User ID:    
XXXXXXXX : My Name
Issued: 
1327507734 : 8:08 am Jan 25 2012
Expires:    
Never
Valid:  True
Origin: Web
Scopes: email offline_access

对于移动/iOS:

App ID: 
XXXXXXXXXXXXXXXX : SomeAppName
Metadata:   "sso":"iphone-safari"
User ID:    
XXXXXXXX : My Name
Issued: 
1327507734 : 8:08 am Jan 25 2012
Expires:    
Never
Valid:  True
Origin: Native Mobile
Scopes: email offline_access

【问题讨论】:

你好。你找到解决这个问题的方法了吗?我现在面临同样的问题... 嗨。不,不幸的是没有。奇怪的是,这似乎是一个相当普遍的要求。花了很长时间寻找,但没有发现任何有用的东西。转移到别的东西上,但很快就必须解决这个问题。 我的应用程序没有非常严格的安全要求,但是,我们所做的只是检查 Facebook 以找到与每个访问令牌关联的用户 ID 以匹配帐户 @alex 运气好吗?你是怎么解决的? 我以阻塞的方式完成这一切。我实际上并没有使用任何内置库,只是自己处理请求。在这种情况下,只需简单调用 graph.facebook.com/me 并解析一些 JSON。 【参考方案1】:

解决此问题的一种可能方法是通过移动设备上的 facebook 进行身份验证,然后将加密的 f_uid 发送到 rails 应用程序,然后该应用程序将解密 f_uid 并查看谁实际登录到服务器。

【讨论】:

【参考方案2】:

仅作记录,我最终处理此问题的方式是将移动令牌传递给服务器并让服务器检查令牌的真实性。一旦确认这一点,我就可以使用 uid 和电子邮件检查我的记录的身份验证。

【讨论】:

我现在也有同样的问题。我不明白你的答案 - 如果从应用程序和网络登录的令牌不同 - 你如何验证它?假设有一个从应用程序登录 - 你如何在网络通话中使用它?【参考方案3】:

你必须在 facebook API 中做一些小改动,在授权中,从

[self authorizeWithFBAppAuth:YES safariAuth:YES];

[self authorizeWithFBAppAuth:NO safariAuth:NO];

因为当您想通过 fbApp 或 Safari 进行身份验证时,令牌会出现问题。我遇到了同样的问题,因此我的 Web 服务中的令牌不同。

【讨论】:

以上是关于在网站和移动应用程序之间共享 Facebook 访问令牌的主要内容,如果未能解决你的问题,请参考以下文章

无法使用开放图形元标记从我的 React next.js 网站共享 Facebook/Twitter 内容

Facebook 明确共享的操作不适用于 Cordova 应用程序

如何在网站中结合facebook登录和本机登录之间的会话

尽管尺寸正确,但 Facebook 从外部网站共享的图像太小

网站上的 Facebook 分享按钮

Facebook 分享按钮与 Facebook 应用程序