2010-10-14 90 views
4

我试图想到一种方式来打开一个网站和其数据库的一部分到其他第三方网站,类似于Twitter如何让webapps连接到它的数据库检索数据和可能存储数据。实现与oAuth或其他访问

我最初的研究让我转向oAuth(或者是openID?)。

我需要做的是让第三方网站登录到网站上的用户帐户,但只能读写属于他们的数据,而不能触及属于其他第三方网站的数据?

我对oAuth的细节有些模糊。我需要创建某种API还是oAuth是我需要实现的唯一事情?正如你所看到的,我不确定如何做到这一点,所以更多专家的任何解释都会有所帮助。

如果我实施oAuth,其他第三方网站是否可以访问网站上的数据?

我可以让其他第三方网站注册用户到主网站,而无需用户访问主网站吗?有没有人认为这是一个坏主意?是/否,为什么?

oAuth如何帮助我确保第三方网站不会读取/写入/更改与另一个第三方网站相关的用户数据。

我敢肯定,这比我想象的要容易,但我是oAuth的新手,所以图片还不清楚。

回答

5

首先,我们要明确一点,OAuth和OpenID是两个单独的东西。 OpenID仅用于认证。 OAuth旨在用于身份验证和授权。在这种情况下,授权是指客户端应用程序授权访问和更新与经过验证的用户相关联的数据。

我需要做的是让第三方网站登录到网站上的用户帐户,但只能读写属于他们的数据,而不能触摸属于其他第三方网站的数据?

如果存储在每个第三方网站上的数据与存储在认证服务器上的数据互斥,那么您可能希望坚持使用OpenID。

但是,如果您希望您的第三方网站更新应该与所有其他第三方网站(即名,姓,街道地址,信用卡信息等)共享的用户信息,那么你可能想要使用OAuth。我知道OpenID规范有一个扩展允许这样的事情(事实上,你可以将它适应于你自己的实现),但是从一般意义上讲,这类东西属于OAuth。

我有点模糊了 oAuth的细节。我是否需要创建API的某种排序 ,或者oAuth是我需要实现的唯一一件事情?

除了使用OAuth服务器请求令牌和授权客户端应用程序的初始细节外,您还必须实现其他方法来检索和更新有关经过验证的用户的信息。例如,Twitter需要您的应用程序通过特定用户的身份验证,并且有权更新用户的状态。除了基本的OAuth实现之外,该更新状态方法是其API的一部分。

如果我实现的OAuth,将其他第三方 第三方网站能够从网站访问数据 ?有没有人认为 这是一个坏主意?是/否,为什么?

这些网站将只允许访问谁已与您的OAuth服务器认证授权该网站访问他们的数据的用户的数据。但是,只有具有有效使用者密钥的网站才能请求适当的令牌开始OAuth会话。因此,只有您授权的网站才能与您的服务器进行互动。

这些令牌总有可能通过Session Fixation被劫持。但这种担忧不应妨碍您实施您的OAuth服务。这并不意味着不要担心。只是不要让它成为一个障碍。

我可以让其他第三方网站注册用户到主网站而无需用户访问主网站吗?

不符合OAuth定义的当前规范。 OAuth背后的想法是您的用户在OAuth服务器上注册。您的第三方客户端使用此服务器作为身份验证点。但这并不意味着,如果应用程序有某种“主”帐户登录(尽管这有其自身的安全风险),则您不能实施某种API来注册用户。这只是不推荐。

oAuth如何帮助我确保第三方网站不会读取/写入/更改与另一个第三方网站相关的用户数据?

仅因为您使用OAuth并不意味着您的第三方网站不能将数据存储在其自己的数据存储中。 Flickr和Twitter都提供OAuth服务,但都不在他们的服务器上存储彼此的信息(没有flickr照片存储在Twitter的数据库中)。

只要您不在OAuth服务器上存储特定于每个应用程序的信息,就不会有问题。请记住,OAuth服务器用于验证用户身份并存储应由所有应用程序共享的基本信息。我会在这里重申,如果你想要做的只是验证用户,然后坚持使用OpenID。

编辑

我可以细分权限,这样当用户授权站点A,他没有将授权给他的充分考虑,而只是授予它访问他的帐户它自己的数据? oAuth可以做到吗?

在您的实施中,您可以。这将是检查与用于访问该OAuth端点的访问令牌关联的消费者密钥的问题。请记住,每次调用API的授权部分都必须包含访问令牌。因此,如果您想要将该端点锁定到特定的应用程序,您可以通过访问令牌和使用者密钥对其进行检查。

+0

很高兴帮助。 :)将编辑我的回复以解决其他问题。 – villecoder 2010-10-14 16:08:25