Php 是否可以在没有javascript的情况下实现Oauth 2.0?

Php 是否可以在没有javascript的情况下实现Oauth 2.0?,php,javascript,oauth,oauth-2.0,single-sign-on,Php,Javascript,Oauth,Oauth 2.0,Single Sign On,在我的电子商务网站上,我为我的用户提供openid登录。 除facebook外,所有主要提供商都为此提供了openid端点。 Facebook只提供OAuth2.0 对于这个例外,我自己设置了一个openid端点,用户可以使用facebooks oauth登录 换句话说,我创建了一个中间站点,用户使用facebook登录,然后使用openid无缝登录到我的电子商务站点。 这只涉及头重定向,对最终用户是透明的 现在,亚马逊是单一登录提供商的首选。它们只支持OAuth2.0 总而言之,oauth 2

在我的电子商务网站上,我为我的用户提供openid登录。 除facebook外,所有主要提供商都为此提供了openid端点。 Facebook只提供OAuth2.0

对于这个例外,我自己设置了一个openid端点,用户可以使用facebooks oauth登录

换句话说,我创建了一个中间站点,用户使用facebook登录,然后使用openid无缝登录到我的电子商务站点。 这只涉及头重定向,对最终用户是透明的

现在,亚马逊是单一登录提供商的首选。它们只支持OAuth2.0

总而言之,oauth 2.0似乎是获胜的候选者,而不是openid,因为我关心的所有提供商现在都支持oauth

所以我考虑直接在我的电子商务站点中实现oauth

但是,不同的提供商的实现说明有很大差异

大多数情况下,需要将外部javascript加载到站点中。 为我想要支持的每个oauth提供程序加载外部Java脚本是我想要避免的一个选项

Facebook提供了一种完全服务器端的方式,不涉及Java脚本

亚马逊没有

但它都是oauth 2.0,不是吗

在我看来,该标准要么非常宽松,要么没有得到一贯的实施

有没有可能有一个通用的oauth 2.0类,在这个类中我只需传递特定于提供者的配置和端点,并实现登录

我看过Zend的实现,但它真的非常巨大。。。 facebook无javascript实现非常小

我在这里有点迷路了。有人能给我指出正确的方向吗

我想实现几个oauth提供程序。谷歌、脸谱网、亚马逊和推特就是其中之一

是否可以使用相同的代码库实现这一点,或者我必须使用它们的sdk类和Java脚本分别实现它们

我可以毫无问题地做到这一点,但出于几个原因(维护、灵活性、额外的新供应商等),我的肠胃确实不喜欢它

OAuth2.0标准在哪里

任何帮助都是值得的

个人旁注

我很抱歉借此机会简单地指出我不知道 像Oauth。它要求每个使用它的站点向 oauth提供者。此外,这些供应商可能不同意与供应商合作 地点。我不喜欢那种权威,我更喜欢openid。我知道不是 很好,但我更喜欢。此外,openid和oauth也容易受到 针对恶意站点允许用户单击 登录按钮,并打开一个伪造的提供者端,用户在其中登录 相信他正在登录提供商网站。不可能 在帮助下,用户必须查看url,以查看其是否真实 所需地点。我知道这是一个根本问题,也是一个难题 但我想指出一点


实际上,实现OAuth客户机根本不需要javascript。OAuth2.0(或1.0)是一个标准,因此要连接到任何实现OAuth的站点,您需要遵循相同的步骤,可能会有一些细微的变化

在PHP中,我使用了这个库,虽然我不知道它是否适合OAuth 2.0,但我使用了1.0和1.0a:


它应该适合您需要连接的所有服务器。另外,一些关于OAuth协议“理论”的阅读可以帮助您:

提供者之间有很多相似之处,基本流程将是相同的。浏览器中通常不需要任何Javascript。每个提供者给你的只是一个帮助者,让事情变得更容易(如果你只是关心他们的话)

看起来你正在一个网站上工作。为此,需要实现的OAuth 2流称为授权代码流。归根结底,只有几个http(s)请求遵循非常相似的模式:

  • 将用户重定向到提供程序
  • 登录和同意页面
  • 使用
    code
  • 您的网站使用步骤3中的
    code
    client\u id
    /
    client\u secret
    (基本上是web服务器的凭据)向提供商请求
    access\u令牌
  • 使用#4中获得的
    access_令牌
    调用提供程序API
  • 若你们想看到更多的细节,我已经写过了。这是在我正在研究的背景下,但原则是一样的

    事情变得更复杂的地方通常是:

    • 权限
      范围
      ,这在不同的提供商之间是不同的。例如:Facebook有很多选项,对你要求用户披露的内容(如朋友、照片等)有非常精细的控制。LinkedIn的权限较少(如个人资料、你的网络、通知)。亚马逊只有两个(姓名、邮政编码)
    这些都是非常特定于提供者的,因为它们涉及到它们所管理的资源。请注意,OAuth本质上是一个授权协议(通常用于身份验证)。在许多情况下,如果您不打算调用它们的API,则可以使用最小范围

    • 用户配置文件信息。大多数提供商都有
      /userprofile
      端点来检索登录用户的属性。但通常情况下,每一个提供商都实现不同的模式:一些使用
      电子邮件
      ,另一些则称之为
      电子邮件地址
      。与
      姓氏
      家族名
      等相同。这取决于o您需要将概要文件规范化为具有通用语义的内容
    对于我们的系统,我们选择尽可能地将所有内容映射到
    openid connect
    userinfo。这并不总是可能的,因为提供商通常会提供更多信息。(我们实际提供的信息)

    关于你的旁注:你是对的,有充分的理由使用SSL