我想要一个网站(带有Devise和Omniauth的Rails 3.1)和一个移动应用程序(iOS5)来共享身份验证。我的意思是,我希望用户能够使用Facebook或SSI访问移动应用程序的SSI,并让移动应用程序使用用户的凭据与网站的API进行通信以对网站进行身份验证。
我目前的网络方面很好地与用户能够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
对于Mobile / 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
答案 0 :(得分:4)
仅仅为了记录,我最终处理这个问题的方法是将移动令牌传递给服务器并让服务器检查令牌的真实性。一旦确认,我可以使用uid和电子邮件检查我的记录的身份验证。
答案 1 :(得分:1)
您必须在facebook API中进行小的更改,在授权中,从
进行更改[self authorizeWithFBAppAuth:YES safariAuth:YES];
要
[self authorizeWithFBAppAuth:NO safariAuth:NO];
因为当你想通过fbApp或Safari进行身份验证时,令牌存在问题。我有同样的问题,我的网络服务中的令牌因此而异。
答案 2 :(得分:0)
解决此问题的一种可能方法是通过移动设备上的facebook进行身份验证,然后将加密的f_uid发送到rails应用程序,然后解压缩f_uid并查看谁实际登录到服务器。