首先,让我们明确一点,OAuth 和 OpenID 是两个不同的东西。 OpenID 仅用于身份验证。 OAuth 用于身份验证和授权。在这种情况下,授权是指客户端应用程序被授权访问和更新与经过身份验证的用户关联的数据。
我需要做的是让第三方网站登录到网站上的用户帐户,但只能读写属于他们的数据,而不能触摸属于其他第三方网站的数据?
如果存储在每个第三方网站上的数据与存储在您的身份验证服务器上的数据互斥,那么您可能希望坚持使用 OpenID。
但是,如果您希望您的第三方网站更新应与所有其他第三方网站共享的用户信息(即名字、姓氏、街道地址、信用卡信息等),那么您可能想使用 OAuth。我知道 OpenID 规范有一个扩展允许这种事情(事实上,你可以将它调整到你自己的实现中),但在一般意义上,这种东西属于 OAuth。
我对细节有点模糊
o认证。我是否需要创建某种类型
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 授权部分的每次调用都必须包含访问令牌。因此,如果您想将该端点锁定到特定应用程序,您可以通过访问令牌和使用者密钥来检查它是有道理的。