8

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

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

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

Web/Rails 令牌(不是真实的):

DDDAKnu1dg40BDHEWN0VDssxs8GGF8ZBEEOb38HnS0IUEQC1NSufmPCcGeFkTuw39ZDl7OhlZBD2jwJEqXdAZCtZBflJRQKZB4ZA

移动/iOS 令牌(不是真实的)

BDDAKnu1dg40BDEo3YjZD2hIwjfZB4slXJj3fmHfzLh5q1xZD0ShfJCb6PMjnApkpM0FTuGGvWnzZBQy4GZCMuysEEqhMz8YgruD53TXKTZC0GPFkfVe0b6fe8wieLLOZDDZA

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

对于 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
4

3 回答 3

4

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

于 2012-04-23T09:40:11.230 回答
1

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

[self authorizeWithFBAppAuth:YES safariAuth:YES];

[self authorizeWithFBAppAuth:NO safariAuth:NO];

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

于 2012-03-25T21:04:03.020 回答
0

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

于 2013-02-24T04:30:36.203 回答