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

问题描述 投票:22回答:4

我在这里下载了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服务器上。

php oauth oauth-2.0
4个回答
42
投票

一旦了解协议的工作原理,设置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对象。

What happens in the background

第1步(授权)

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

第2步(令牌)

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

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


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仍处于草案修订版,每个提供商都遵循不同的修订版


4
投票

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

  • 听插座
  • 身份验证 - >请求
  • 身份验证过程 - >服务器端规则
  • 身份验证 - >响应结果
  • 继续收集响应的客户端需求

简短的回答是:curl + JSON

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

在响应收集'JSON Decode'变量作为独立var并且现在客户端脚本知道对该客户端做什么。

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.