【问题标题】:OAuth 2.0 PHP Client and Server ExampleOAuth 2.0 PHP 客户端和服务器示例
【发布时间】:2011-12-25 15:37:16
【问题描述】:

我下载了可用于 OAuth 2.0 here 的服务器版本 (PDO):

说实话,不确定它是否是最好的实现。

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

现在,它带有一个“lib”文件夹,其中包含一个 Client .inc 文件。老实说,我不确定如何使用它,因为我在存档中没有找到 PHP 示例,并且在网上找不到任何东西。我找到了一个使用这个库的 Drupal 示例,但是由于它们有自己的 Drupal 相关功能作为一个模块,所以它是一团糟。

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

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

【问题讨论】:

  • 不是重复的。你提到的 Noah 的问题是针对 OAuth 1.0,这个问题是针对 OAuth 2.0,一个完全不同的野兽。
  • 这里有人知道如何设置 PHP OAuth 提供程序吗?
  • @UzairSajid:我不久前写过一篇。从代码中启发自己? github.com/srenauld/laravel-oauth2-server
  • @SébastienRenauld 我最终还根据我找到的 Draft 10 实现编写了自己的 Codeigniter 库。

标签: php oauth oauth-2.0


【解决方案1】:

一旦您了解了协议的工作原理,设置 OAuth2 提供程序就相当容易了。这是一个两到三步的过程(取决于您的设置以及您是代表用户获取令牌还是仅从服务器获取令牌)。

你需要什么:

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

你需要弄清楚如何处理你的代码:

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

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

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

完成后(通常有一个提交按钮),您的浏览器将被重定向到使用 URL 中的代码指定的 URI (code=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 中提供的信息以防止劫持。

第 2 步(令牌)

这是实际创建访问令牌的地方。很多验证,很多东西,但最终,token 只是一个链接你的 client_id 和你的 token 的值。就是这样。

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

【讨论】:

  • @Red2678:OP 再也没有回来。
【解决方案2】:

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、Google、Yahoo、Twitter 等)实现了自己的 Oauth 风格,而且 Oauth 2.0 仍处于草案修订阶段,每个提供商都遵循不同的修订版

【讨论】:

    【解决方案3】:

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

    • 在套接字上监听
    • 身份验证 -> 请求
    • 身份验证过程 -> 服务器端规则
    • 身份验证 -> 响应结果
    • 继续收集响应的客户端需求

    简短的回答是:curl + JSON

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

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

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

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

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

        到:

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

        亚当

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-03-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-01-05
          • 2014-02-25
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多