在我的电子商务网站上,我向用户提供openid登录信息。 除facebook之外的所有主要提供商都提供了一个openid端点。 Facebook只提供了oauth 2.0。
对于该异常,我自己设置了一个openid端点,用户可以使用facebooks oauth登录。
换句话说,我创建了一个中间站点,用户使用Facebook登录,然后使用openid无缝地登录到我的电子商务站点。 这只涉及标题重定向,并且对最终用户透明。
现在亚马逊joined the league单点登录提供商。他们只支持oauth 2.0。
总而言之,oauth 2.0似乎是获胜的候选人而不是openid,因为我关心的所有提供商现在都支持oauth。
所以我想到将oauth直接应用到我的电子商务网站。
然而,实施指示因提供商而异。
大多数都需要在网站中加载外部JavaScript。 为我想支持的每个oauth提供程序加载外部javascripts是我想避免的选项。
Facebook提供完全服务器方面,没有javascripts。
亚马逊没有。
但它的所有oauth 2.0不是吗?
在我看来,标准是非常放松或不一致的。
是否可以拥有一个通用的oauth 2.0类,我只传递特定于提供者的配置和端点并实现登录?
我查看了Zend的实现,但它确实非常庞大...... facebook no-javascript实现真的很小......
我有点迷失在这里。有人能指出我正确的方向吗?
我想实现几个oauth提供程序。其中有谷歌,脸书,亚马逊和推特。
是否可以使用相同的代码库来实现这一点,或者我是否必须使用他们的sdk类和javascripts单独实现它们?
我可以毫无问题地做到这一点,但我的傻瓜真的不喜欢它有几个原因(维护,灵活性,addint新的供应商等等。)
那里的oauth 2.0标准在哪里?
任何帮助都是适当的。
个人旁注
我很抱歉抓住这个机会简要指出我没有 像Oauth。它要求每个使用它的网站都注册 oauth提供者。这些提供商也可能不同意合作 站点。我不喜欢那种权威,我更喜欢openid。我知道不是 完美,但我更喜欢它。 openid和oauth也很脆弱 设计用于恶意网站允许用户点击的攻击 登录按钮并打开一个欺骗性的提供者端,用户登录 在相信他正在登录提供者网站。它不能 帮助,用户必须查看网址,看看它是否真的 想要的网站。我知道这是一个根本问题而且很难 处理,但我想指出它。
答案 0 :(得分:3)
提供商之间存在很多相似之处,基本流程也是如此。浏览器中通常不需要任何Javascript。每个提供商给你的东西只是让你更容易的帮助(如果你只关心他们)。
您似乎正在开发一个网站。为此,您需要实现的OAuth 2流称为授权代码流。最重要的是,它只是一些遵循非常类似模式的http(s)请求:
code
access_token
和code
/ client_id
(基本上是您的网络服务器的凭据),向提供商请求client_secret
。access_token
来调用提供程序API。如果你想了解更多细节,我已经写了here。它是在product我正在研究的背景下,但原则是相同的。
经常变得复杂的地方是:
scope
,不同于一个提供商。例如:Facebook拥有大量选项,可以非常精细地控制您要求用户披露的内容(例如朋友,照片等)。 LinkedIn的数量较少(例如个人资料,您的网络,通知)。亚马逊只有两个(name,postal_code)。这些都是特定于提供商的,因为它们与他们管理的资源相关。请注意,OAuth本质上是一个授权协议(通常用于身份验证)。在许多情况下,如果您不打算调用他们的API,那么您可以使用最小范围。
/userprofile
端点来检索登录用户的属性。但通常情况下,每个人通常会实现不同的模式:有些使用email
其他模式会调用emailaddress
。与last_name
vs family_name
等相同。您可以将配置文件规范化为具有常见语义的内容。 对于我们的系统,我们选择尽可能将所有内容映射到openid connect
userinfo standard claims。并非总是可行,因为提供商通常会提供更多信息。 (Here's我们实际提供的内容)
关于你的附注:你是对的,使用SSL 总是的充分理由。也是一些提供商正在添加多因素身份验证的原因。
答案 1 :(得分:1)
实际上,您根本不需要javascript来实现OAuth客户端。 OAuth 2.0(或1.0)是一种标准,因此要连接到任何实施OAuth的网站,您需要遵循相同的步骤,可能会略有不同。
在PHP中我使用了这个库,虽然我不知道它是否适合OAuth 2.0,我使用的是1.0和1.0a:
它应该适合您需要连接的所有服务器。此外,一些关于OAuth协议“理论”的阅读可以帮助您:http://oauth.net/2/