使用oAuth或其他方式实现访问

时间:2010-10-14 11:04:29

标签: php api authentication openid oauth

我正在尝试一种方法来打开一个网站及其部分数据库到其他第三方网站,类似于Twitter让webapps连接到其数据库以检索数据和可能存储数据的方式。

我最初的研究让我去了oAuth(或者它是openID?)。

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

我对oAuth的细节有点模糊。我是否需要创建某种API或oAuth是我唯一需要实现的东西?正如你所看到的,我不知道如何做到这一点,所以任何更专家的解释都会有所帮助。

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

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

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

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

1 个答案:

答案 0 :(得分: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的授权部分都必须包含访问令牌。因此,如果您想将该端点锁定到特定应用程序,则可以通过访问令牌和使用者密钥进行检查。