在我的电子商务网站上,我为我的用户提供 openid 登录。除了 facebook,所有主要的供应商都提供了一个 openid 端点。Facebook 仅提供 oauth 2.0。
对于那个例外,我自己设置了一个 openid 端点,用户可以使用 facebooks oauth 登录。
换句话说,我创建了一个中间站点,用户在其中使用 facebook 登录,并从那里使用 openid 无缝登录到我的电子商务站点。这仅涉及标头重定向并且对最终用户透明。
现在亚马逊加入了单点登录提供商联盟。他们只支持 oauth 2.0。
总而言之,oauth 2.0 似乎是获胜的候选人,而不是 openid,因为我关心的所有提供商现在也支持 oauth。
所以我考虑直接在我的电子商务网站中实现 oauth。
然而,实施说明因供应商而异。
大多数需要加载到站点的外部javascript。为我想要支持的每个 oauth 提供者加载外部 JavaScript 是我想避免的一个选项。
Facebook 提供了一个完全服务器端的方式,不涉及 JavaScript。
亚马逊没有。
但是它的所有oauth 2.0不是吗?
在我看来,该标准要么非常宽松,要么没有得到一致实施。
是否可以有一个通用的 oauth 2.0 类,我只需传递特定于提供者的配置和端点并实现登录?
我查看了 Zend 的实现,但它真的很大...... facebook 的 no-javascript 实现真的很小......
我有点迷失在这里。有人可以指出我正确的方向吗?
我想实现几个 oauth 提供程序。其中肯定有谷歌、脸书、亚马逊和推特。
是否可以使用相同的代码库来实现这一点,还是我必须使用它们的 sdk 类和 javascript 分别实现它们?
我可以毫无问题地做到这一点,但我的胆量真的不喜欢它,原因有几个(维护、灵活性、添加新供应商等)
oauth 2.0 标准在哪里?
任何帮助都会得到帮助。
个人旁注
很抱歉借此机会简要指出我不喜欢 Oauth。它要求使用它的每个站点都向 oauth 提供程序注册。此外,这些提供商可能不同意与网站合作。我不喜欢那个权限,我更喜欢openid。我知道它并不完美,但我更喜欢它。此外,openid 和 oauth 在设计上也很容易受到攻击,其中恶意站点允许用户单击登录按钮并打开欺骗的提供方,用户在登录时相信他正在登录提供方站点。没办法,用户必须查看 url 以查看它是否真的是所需的站点。我知道这是一个基本问题并且难以处理,但是我想指出这一点。