2

众所周知,Twitter、Facebook 等社交网络都有自己的移动应用程序。其他 3rd 方应用程序使用他们的 API,在注册应用程序后只能通过 OAuth 协议进行身份验证。

那么 Facebook、Twitter、Foursquare 等究竟是如何通过“用户名”和“密码”的身份验证在自己的移动应用程序上访问他们的 API 的呢?我不认为他们只是在每个请求中发送用户名和密码作为参数。

更重要的一点是,当您登录这些官方移动应用程序时,您不会遇到 Web 界面,请求许可并具有 OAuth 过程中存在的“允许此应用程序”按钮。他们默认经过身份验证!

在调查时我遇到了XAuth,但是在观看了它的介绍视频之后,它似乎是浏览器上的共享存储。我不是在寻找那个,然后我在 Twitter 中遇到了 xAuth 的使用。它通过 SSL 发送一次用户名/密码进行身份验证,然后服务器发出 OAuth 令牌/秘密对。(这看起来像 OAuth v1 而不是 v2,这并不酷。)

它看起来像我正在寻找的东西,但我不太确定。除了维护 xAuth 需要的 OAuth 服务器之外,还有其他选择吗?因为在我的用例中,可能根本不存在第 3 方应用程序。

4

1 回答 1

2

在这种情况下,官方应用程序只是使用他们想要的任何身份验证。我认为将 OAuth 和 XAuth 用于非官方应用程序的目的是允许对那些 (1) 可以由用户撤销的那些 3rd 方进行一些访问,并且 (2) 不需要 3rd 方拥有用户名/用户自己的密码。事实上,在 OAuth 等人更广泛地采用之前,需要您的用户名和密码的 3rd 方应用程序非常普遍。只有在 Facebook 关闭这种访问之后,OAuth 方法才变得更常用(在他们的案例中)。

对于官方应用程序,没有理由通过 OAuth,因为为了获得 OAuth 身份验证令牌,无论如何您都必须输入您的用户名和密码。对于官方应用程序,这将变得多余且不必要。

官方应用程序也可能与一组仅接受来自移动应用程序的登录的专用身份验证服务器通信,移动应用程序可能会提供一些特殊的额外信息,将其标识为官方应用程序,或在用户名之上的一些其他机制和验证密码。我不是 Facebook 开发人员,所以我不知道。但我的观点是,Facebook/Twitter 可能有一个单独的基于密码的 API 登录,并且该 API 只能通过 Web 界面和其他官方登录模式访问。

因此,在您的情况下,如果您正在构建社交网络(或任何具有移动访问权限的 Web 服务),只需为您的官方应用程序使用基于密码的标准登录方式,但不要让所有人都可以使用该登录方式。如果您想通过 API 允许第 3 方访问,您确实需要设置一个 OAuth/XAuth 服务器来执行此操作,以使您的用户密码仅在您的控制之下(并且不会泄露给第 3 方组/网站/应用程序)。

于 2011-10-31T13:31:46.850 回答