OAuth 2.0 PHP客户端和服务器示例

时间:2011-11-09 20:27:25

标签: php oauth oauth-2.0

我在这里下载了OAuth 2.0可用的服务器版本(PDO):http://code.google.com/p/oauth2-php/

不确定这是否是最好的实施方式。

它已配置并且当前返回错误JSON,表明它正在等待客户端传递正确的参数。

现在,它带有一个带有Client .inc文件的“lib”文件夹。老实说,我不知道如何使用它,因为我没有在存档中找到的PHP示例,也无法在线找到任何内容。我找到了一个使用这个库的Drupal的例子,但是它有一个混乱,因为它们有自己的Drupal相关功能作为模块。

我想知道这里有没有人有幸使用这个PHP客户端库,如果是这样,他们可以共享一个连接,授权然后重定向到回调URL的示例,该会话能够访问受保护的页面/ api调用?

我想尝试Facebook Graph API(开源),但我发现它非常适合Facebook,并且不太确定我应该将URL放在我自己的服务器机器上安装的OAuth 2.0服务器上。

5 个答案:

答案 0 :(得分:43)

一旦您了解协议的工作原理,就可以轻松设置OAuth2提供程序。这是一个2步或3步的过程(取决于您的设置以及您是代表用户还是仅从服务器获取令牌)。

您需要什么:

  • OAuth2提供商的工作代码
  • 耐心

您需要了解如何处理代码:

  • 创建客户端(公共和私人访问令牌)
  • 了解如何命名授权和令牌端点(通常为/authorize/token
  • 弄清楚如何处理范围

获取令牌的第一步是致电/authorize?response_type=code&client_id=[YOUR ID]&redirect_uri=[YOUR REDIRECT URI]&scope=[YOUR SCOPE],其中:

  • clientid([您的ID])是您的公共访问令牌
  • redirect_uri([您的REDIRECT URI])是您的重定向URI。完成自动调整步骤后,您将被重定向到此
  • 范围是您未来令牌的范围

完成后(通常是提交按钮),您的浏览器将被重定向到使用URL中的代码指定的URI(代码= blah)。保存此值。

当您获得此代码时,请调用另一个端点:/token?client_id=[YOUR ID]&client_secret=[YOUR SECRET]&grant_type=authorization_code&scope=[YOUR SCOPE]&code=[YOUR CODE]&redirect_uri=[YOUR REDIRECT URI]

参数: - client_id - 再次,您的客户端公钥 - client_secret - 您的私钥(这应该是服务器端调用) - 范围 - 令牌的范围 - 必须匹配第一个呼叫 - redirect_uri - 重定向URI - 必须匹配第一个调用 - 代码 - 您收到的代码

如果一切正常,您将在屏幕上看到包含令牌信息的JSON对象。

后台会发生什么

第1步(授权)

当您确认表单时,服务器会创建一个临时令牌(当他们被调用时使用身份验证令牌),这通常具有很短的生命周期(我的oauth2 sp代码通常将此设置为60秒)。这是您的服务器从接收代码到触发步骤2的时间。它只是一个确认系统,其目的是还存储步骤1中提供的信息以防止劫持。< / p>

第2步(令牌)

这是您实际创建访问令牌的地方。大量的验证,很多东西,但最后,令牌只是一个链接你的client_id和你的令牌的值。这就是全部。

无耻的插件:如果你正在使用Laravel框架,我已经从头开始构建了这个(而不是使用蹩脚的,未记录的示例代码):http://bundles.laravel.com/bundle/oauth2-sp

答案 1 :(得分:5)

PHP有一个PECL客户端:http://www.php.net/manual/en/book.oauth.php

关于oauth2的简介:http://www.slideshare.net/aaronpk/an-introduction-to-oauth-2

此网站oauth2.net/2/列出了处于不同开发阶段的3台oauth服务器。

大型提供商(Facebook,谷歌,雅虎,Twitter等)实现了他们自己的Oauth风格,而且Oauth 2.0仍在修订草案中,每个提供商都遵循不同的修订版

答案 2 :(得分:4)

我正在研究某种类型的PHP客户端,它执行以下操作:

  • 听插座
  • 身份验证 - &gt;请求
  • 认证过程 - &gt;服务器端规则
  • 身份验证 - &gt;作为结果的回应
  • 继续收集回复的客户端要求

简短回答是:curl + JSON

所有身份验证过程请求curl到我的服务器端脚本,该脚本接受身份验证变量,然后进行处理和比较,最后回显'JSON Encoded'响应包含返回给客户端的echo中的多个变量

响应收集'JSON解码'变量作为独立的var,现在客户端脚本知道该客户端的操作。

然后给当前经过身份验证的用户(由Sessions指定)一些工具。 所有工作都在PHP Desktop执行,这是一个嵌入式mongoose Web服务器,支持PHP和curl。 实际上,没有必要使用任何lib,因此PHP拥有自己的完整库。使用curl,JSON,在服务器端PHP中,MySQL(条件检查)足以用于身份验证。

答案 3 :(得分:0)

我对你的问题感到困惑。你说“它已配置并且当前返回一个错误JSON,表明它正在等待客户端传递正确的参数”,但你想要一个“连接,授权然后重定向到回调URL”的例子“?如果您已经启动并运行并等待接受请求,那么您应该能够使用jQuery Ajax请求(使用授权标头)来发出请求。只要您插入了相应的client_id和client_secret,就应该返回您设置的Web API以进行转储。

答案 4 :(得分:0)

pdo_oauth示例的代码中有错误。密钥没有保存到数据库中,因此这可能就是您遇到问题的原因。

pdo_oauth.php的第45行需要更改为:

 $stmt->bindParam(":pw", $pw, PDO::PARAM_STR);

收件人:

 $stmt->bindParam(":pw", $secret, PDO::PARAM_STR);

亚当