thomseddon / cakephp-oauth-server
CakePHP OAuth2 服务器插件
Requires
- php: >=5.3.0
- composer/installers: *
- thomseddon/oauth2-php: dev-master
This package is not auto-updated.
Last update: 2020-01-24 15:02:25 UTC
README
CakePHP OAuth2 服务器插件
这是一个用于在 CakePHP 中实现 OAuth 服务器/提供者的插件,基于 quizlets oauth2-php 库
包含什么内容?
- 一个可爱的 OAuth 组件,允许轻松访问 oauth 库
- 所需的模型,带有超级安全的自动 beforeSave 令牌散列
- 类似 AuthComponent 的接口,用于允许/拒绝操作
- 方便的函数,用于获取当前用户和添加客户端
- 一个具有授权和令牌端点的示例控制器
要求
在您的 Vendors 文件夹中克隆 oauth2-php
克隆 oauth2-php
$ git clone git://github.com/quizlet/oauth2-php.git Vendor/oauth2-php
或通过子模块
$ git submodule add git://github.com/quizlet/oauth2-php.git Vendor/oauth2-php
安装
填充数据库
首先,我们需要使用正确的表填充数据库。
两种方法:使用 schema.sql 或通过 CakeDC 迁移插件 使用迁移
转到 Config/Schema/schema.sql 以获取表
或者
$ cake Migrations.migration run all --plugin OAuth
克隆
然后将此存储库克隆到您的 Plugins 文件夹中的 "OAuth" 文件夹中
$ git clone git://github.com/thomseddon/cakephp-oauth-server.git Plugin/OAuth
或通过子模块
$ git submodule add git://github.com/thomseddon/cakephp-oauth-server.git Plugin/OAuth
加载插件
加载插件
CakePlugin::loadAll(); // Loads all plugins at once CakePlugin::load('OAuth'); //Just load OAuth
在控制器中包含组件
并在您的控制器中包含该组件
$components = array('OAuth.OAuth');
入门
OAuth
了解 OAuth 协议应该是使用此插件的前提条件。 Google、Facebook 和官方规范中提供了良好的文档,解释了各种 OAuth2 流程。为了参考,此插件目前支持以下授权类型
- 授权代码授权
- 刷新令牌授权
- 资源所有者密码凭证授权(需要设置,见下文)
如果您需要其他类型,请将其构建到基础 oauth2-php 库 中,并告诉我 :)
请注意,大多数 OAuth 方法都支持 GET 和 POST,因此您可以直接从浏览器测试您的设置。
控制器设置
要使用“资源所有者密码凭据授权”,您需要配置插件,使其知道在哪里查找您的用户用户名/密码组合。默认情况下,它将尝试一个具有“username”和“password”字段的“Users”模型,您可以在控制器中的beforeFilter之前更改此设置
$this->OAuth->authenticate = array( 'userModel' => 'Members', 'fields' => array( 'username' => 'email' ) );
您可以通过与AuthComponent控制访问权限相同的方式控制OAuth访问令牌可以访问的操作,例如,在控制器中的beforeFilter中放置以下内容
$this->OAuth->allow(array('userinfo', 'example'));
这将允许访问“userinfo”和“example”操作。
添加OAuth客户端
OAuth客户端是一个可以代表资源所有者访问资源的应用程序,即可以使用您的API的人。
此插件包含所有必需的模型,包括用于添加和访问OAuth客户端的“Clients”模型。您可能希望自行处理客户端的添加,请参阅tables.sql以获取模式,或者您可以使用模型中包含的便捷方法,如下所示
$client = $this->OAuth->Client->add('http://www.return_url.com')
这将生成client_id和client_secret,并返回类似以下内容
Array(
[client_id] => NGYcZDRjODcxYzFkY2Rk
[client_secret] => 8e7ff3208eed06d101bf3da2473fc92ac1c6d2e7
[redirect_uri] => http://www.return_url.com
)
此方法包括用于生成客户端ID的各种方案,选择您喜欢的。
注意:此便捷方法将在存储之前生成随机客户端密钥并对其进行哈希处理以提高安全性。尽管当您首次添加新客户端时,它将返回实际的原始客户端密钥,但无法从数据库中存储的哈希中确定此密钥。因此,如果客户端忘记了其密钥,则必须颁发新密钥。
包含的端点
此插件包含一个示例控制器,该控制器提供了生成访问令牌所需的端点。还包括路由以提供性感的URL,例如:"/oauth/token",您可以通过在bootstrap.php中放置以下内容来启动它们
CakePlugin::loadAll(array( 'OAuth' => array('routes' => true) ));
例如,一旦您注册了客户端,然后可以使用授权码授权,如下所示
- 获取授权码
/oauth/authorize?response_type=code&client_id=xxxx&redirect_url=http%3a%2f%2flocalhost
- (注意对redirect_uri进行URL编码)
- 用访问令牌交换代码
/oauth/token?grant_type=authorization_code&code=from_above&client_id=xxxx&client_secret=xxxx
- 使用访问令牌
/oauth/userinfo?access_token=from_above
代码中包含大量文档,所以请深入研究,动手操作,并在此处提交任何问题!