我想要一个网站(带有 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