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



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

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

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

Web/RRails令牌(非真实):

DDDAKnu1dg40BDHEWN0VDssxs8GGF8ZBEEOb38HnS0IUEQC1NSufmPCcGeFkTuw39ZDl7OhlZBD2jwJEqXdAZCtZBflJRQKZB4ZA

移动/iOS代币(非真实)

BDDAKnu1dg40BDEo3YjZD2hIwjfZB4slXJj3fmHfzLh5q1xZD0ShfJCb6PMjnApkpM0FTuGGvWnzZBQy4GZCMuysEEqhMz8YgruD53TXKTZC0GPFkfVe0b6fe8wieLOZDDZA

使用Facebook的访问令牌调试器,我得到了以下内容(令牌之间删除的所有内容都相同):

对于Web/RRails令牌:

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

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

您必须在facebook API中进行小的更改,在授权中,从更改

[self authorizeWithFBAppAuth:YES safariAuth:YES];

[self authorizeWithFBAppAuth:NO safariAuth:NO];

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

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

最新更新