OAuth 2.0 PHP 客户端和服务器示例在后台会发生什么

2022-08-30 16:28:37

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

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

它已配置,当前返回错误 JSON,指示它正在等待客户端向其传递正确的参数。

现在,它带有一个“lib”文件夹,其中包含一个客户端.inc文件。老实说,我不确定如何使用它,因为我在存档中没有找到PHP示例,也无法在线找到任何内容。我找到了一个使用这个库的Drupal示例,但是考虑到它们有自己的Drupal相关功能作为模块,这是一团糟。

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

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


答案 1

一旦您知道协议的工作原理,设置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([您的重定向 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(令牌)

这是实际创建访问令牌的位置。大量的验证,很多东西,但最终,令牌只是一个将你的client_id和你的令牌联系起来的值。仅此而已。

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


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


推荐