我在这里下载了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服务器上。
答案 0 :(得分:43)
一旦您了解协议的工作原理,就可以轻松设置OAuth2提供程序。这是一个2步或3步的过程(取决于您的设置以及您是代表用户还是仅从服务器获取令牌)。
您需要什么:
您需要了解如何处理代码:
/authorize
和/token
)获取令牌的第一步是致电/authorize?response_type=code&client_id=[YOUR ID]&redirect_uri=[YOUR REDIRECT URI]&scope=[YOUR SCOPE]
,其中:
完成后(通常是提交按钮),您的浏览器将被重定向到使用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客户端,它执行以下操作:
简短回答是: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);
亚当