首先,我们要明确 OAuth 和 OpenID 是两个不同的东西。 OpenID 旨在用于仅认证。 OAuth 用于身份验证和授权。在这种情况下,授权是指客户端应用程序是授权的访问和更新与经过身份验证的用户关联的数据。
我需要做的是让第三方网站登录网站上的用户帐户,但只能读写属于自己的数据,而无法触及属于其他第三方网站的数据?
如果每个第三方网站上存储的数据与您的身份验证服务器上存储的数据互斥,那么您可能需要坚持使用 OpenID。
但是,如果您希望第三方网站更新应与所有其他第三方网站共享的用户信息(即名字、姓氏、街道地址、信用卡信息等),那么您可能需要与 OAuth 一起使用。我知道 OpenID 规范有一个扩展,允许此类事情(实际上,您可以将其调整为您自己的实现),但从一般意义上来说,此类内容属于 OAuth。
我对细节有点模糊
oAuth。我需要创建某种类型吗
API 还是 oAuth 是我唯一的东西
需要实施吗?
除了请求令牌和使用 OAuth 服务器授权客户端应用程序的初始详细信息之外,您还必须实现其他方法来检索和更新有关经过身份验证的用户的信息。例如,Twitter 要求您的应用程序经过特定用户的身份验证并有权更新用户的状态。除了基本 OAuth 实现之外,更新状态方法也是其 API 的一部分。
如果我实现 oAuth,其他第三个会吗
当事人网站能够访问数据
从网站上?有谁认为
这是一个坏主意?是/否,为什么?
这些网站将只被允许访问已通过您的 OAuth 服务器进行身份验证的用户的数据and授权该网站访问其数据。但是,只有那些拥有有效消费者密钥的网站才能请求正确的令牌来开始 OAuth 会话。因此,只有您授权的网站才被允许与您的服务器交互。
这些代币总是有可能被劫持会话固定 http://oauth.net/advisories/2009-1/。但这种担忧不应阻止您实施 OAuth 服务。这并不意味着不用担心。只是不要让它成为障碍。
我可以让其他第三方网站将用户注册到主网站,而用户不必访问主网站吗?
不符合 OAuth 定义的当前规范。 OAuth 背后的想法是您的用户在 OAuth 服务器上注册。您的第三方客户端使用此服务器作为身份验证点。然而,这并不意味着如果应用程序有某种“主”帐户可供登录,您就不能实现某种 API 来注册用户(尽管这是它自身的安全风险)。只是不推荐。
oAuth 如何帮助我确保第三方网站不会读取/写入/更改与其他第三方网站相关的用户数据?
仅仅因为您使用 OAuth 并不意味着您的第三方网站无法在自己的数据存储中存储数据。 Flickr 和 Twitter 都提供 OAuth 服务,但两者都没有在各自的服务器上存储彼此的信息(Twitter 的数据库中不存储 flickr 照片)。
只要您没有在 OAuth 服务器上存储特定于每个应用程序的信息,就不会有问题。请记住,OAuth 服务器用于对用户进行身份验证并存储应由所有应用程序共享的基本信息。我在此重申,如果您只想验证用户身份,那么请坚持使用 OpenID。
Edit
是否可以对权限进行分段,使得用户授权站点A时,不授权给自己的完整账户,而只授权其访问自己账户上的数据? oAuth 可以这样做吗?
在您的实施中,您可以。这将是检查与用于访问该 OAuth 端点的访问令牌关联的消费者密钥的问题。请记住,对 API 授权部分的每次调用都必须包含访问令牌。因此,如果您想将该端点锁定到特定应用程序,您可以通过访问令牌和消费者密钥来检查它,这是有道理的。