coretrekas / idp
用于与 Coretrek IDP 服务交互的 SDK,支持 Laravel
v1.0.10
2023-09-13 09:44 UTC
Requires
- php: ^8.1.0
- guzzlehttp/guzzle: *
- illuminate/http: *
- illuminate/support: *
Requires (Dev)
- laravel/pint: ^1.4
- orchestra/testbench: *
README
用于与 Coretrek IDP 服务交互的 SDK,支持 Laravel。
安装
首先通过 composer 安装此包。
composer require coretrekas/idp
手动设置 SDK
根据您的凭证生成或创建一个 token 实例。
$token = \Coretrek\Idp\Token::make('https://idp-server.com', 'client_id', 'client_secret', ['*']); // Or... $token = new \Coretrek\Idp\Token('Bearer', 'ACCESS-TOKEN', 10000); // Properties. $token->type; $token->accessToken; $token->expiresIn; $token->toArray(); // Returns: // [ // 'token_type' => 'Bearer', // 'expires_in' => 10000, // 'access_token' => 'ACCESS-TOKEN', // ]
您应该在应用程序中存储 token,以防止每次都生成。token 的有效期由 token 的 expires_in
部分定义。可以使用 toArray()
或 toJson()
方法来存储 token。
当您有一个有效的 token 实例时,可以实例化 SDK。
$sdk = new \Coretrek\Idp\Sdk($token, 'https://idp-server.com', 'nb');
使用 Laravel 设置 SDK
在 Laravel 中,服务提供者将由框架自动找到。它还会自动处理使用您选择的缓存驱动程序存储 token 和在需要时刷新 token。
用法
用户
列出所有用户。
// Plain sdk $sdk->users()->list(); $sdk->users()->list($perPage = 25); $sdk->users()->list($filters = ['first_name' => 'John']); $sdk->users()->list($perPage = 25, $filters = ['first_name' => 'John']); // Laravel facade \Coretrek\Idp\Facades\Sdk::users()->list();
获取单个用户。
// Plain sdk $sdk->users()->show('986b24bb-655a-4fc5-9608-8a8aba83b2dd'); $sdk->users()->show('986b24bb-655a-4fc5-9608-8a8aba83b2dd', $includes = ['groups']); // Laravel facade \Coretrek\Idp\Facades\Sdk::users()->show('986b24bb-655a-4fc5-9608-8a8aba83b2dd');
创建新用户。
// Plain sdk $sdk->users()->create([ 'first_name' => 'John', 'last_name' => 'Doe', 'email' => 'john@example.com', 'mobile' => '+4795916561', 'password' => 'Password1', 'locale' => 'nb', 'email_verified_at' => '2023-01-01 10:00:00', 'two_factor_secret' => 'abc123', 'two_factor_recovery_codes' => 'abc123 acd 321', 'meta' => [ 'foo' => 'bar', ], ]); // Laravel facade \Coretrek\Idp\Facades\Sdk::users()->create();
验证新用户而不创建它。
// Plain sdk $sdk->users()->onlyValidate()->create([ 'first_name' => 'John', 'last_name' => 'Doe', 'email' => 'john@example.com', 'mobile' => '+4795916561', 'password' => 'Password1', 'locale' => 'nb', 'email_verified_at' => '2023-01-01 10:00:00', 'two_factor_secret' => 'abc123', 'two_factor_recovery_codes' => 'abc123 acd 321', 'meta' => [ 'foo' => 'bar', ], ]); // Laravel facade \Coretrek\Idp\Facades\Sdk::users()->onlyValidate()->create();
更新用户。
// Plain sdk $sdk->users()->update('986b24bb-655a-4fc5-9608-8a8aba83b2dd', [ 'first_name' => 'John', 'last_name' => 'Doe', 'email' => 'john@example.com', 'mobile' => '+4795916561', 'password' => 'Password1', 'locale' => 'nb', 'email_verified_at' => '2023-01-01 10:00:00', 'two_factor_secret' => 'abc123', 'two_factor_recovery_codes' => 'abc123 acd 321', 'meta' => [ 'foo' => 'bar', ], ]); // Laravel facade \Coretrek\Idp\Facades\Sdk::users()->update();
验证给定用户的更新请求。
// Plain sdk $sdk->users()->onlyValidate()->update('986b24bb-655a-4fc5-9608-8a8aba83b2dd', [ 'first_name' => 'John', 'last_name' => 'Doe', 'email' => 'john@example.com', 'mobile' => '+4795916561', 'password' => 'Password1', 'locale' => 'nb', 'email_verified_at' => '2023-01-01 10:00:00', 'two_factor_secret' => 'abc123', 'two_factor_recovery_codes' => 'abc123 acd 321', 'meta' => [ 'foo' => 'bar', ], ]); // Laravel facade \Coretrek\Idp\Facades\Sdk::users()->onlyValidate()->update();
删除用户。
// Plain sdk $sdk->users()->delete('986b24bb-655a-4fc5-9608-8a8aba83b2dd'); // Laravel facade \Coretrek\Idp\Facades\Sdk::users()->delete('986b24bb-655a-4fc5-9608-8a8aba83b2dd');
组
列出所有组。
// Plain sdk $sdk->groups()->list(); $sdk->groups()->list($perPage = 25); $sdk->groups()->list($filters = ['identifier' => 123]); $sdk->groups()->list($perPage = 25, $filters = ['identifier' => 123]); // Laravel facade \Coretrek\Idp\Facades\Sdk::groups()->list();
获取单个组。
// Plain sdk $sdk->groups()->show('986b24bb-655a-4fc5-9608-8a8aba83b2dd'); $sdk->groups()->show('986b24bb-655a-4fc5-9608-8a8aba83b2dd', $includes = ['users']); // Laravel facade \Coretrek\Idp\Facades\Sdk::groups()->show('986b24bb-655a-4fc5-9608-8a8aba83b2dd');
创建新组。
// Plain sdk $sdk->groups()->create([ 'name' => 'Group A', 'description' => 'Description of the group A', 'identifier' => '000000000', 'meta' => [ 'foo' => 'bar', ], ]); // Laravel facade \Coretrek\Idp\Facades\Sdk::groups()->create();
仅验证一组组属性而不创建组。
// Plain sdk $sdk->groups()->onlyValidate()->create([ 'name' => 'Group A', 'description' => 'Description of the group A', 'identifier' => '000000000', 'meta' => [ 'foo' => 'bar', ], ]); // Laravel facade \Coretrek\Idp\Facades\Sdk::groups()->onlyValidate()->create();
更新组。
// Plain sdk $sdk->users()->update('986b24bb-655a-4fc5-9608-8a8aba83b2dd', [ 'name' => 'Group A', 'description' => 'Description of the group A', 'identifier' => '000000000', 'meta' => [ 'foo' => 'bar', ], ]); // Laravel facade \Coretrek\Idp\Facades\Sdk::users()->update();
仅验证组属性而不更新它。
// Plain sdk $sdk->users()->onlyValidate()->update('986b24bb-655a-4fc5-9608-8a8aba83b2dd', [ 'name' => 'Group A', 'description' => 'Description of the group A', 'identifier' => '000000000', 'meta' => [ 'foo' => 'bar', ], ]); // Laravel facade \Coretrek\Idp\Facades\Sdk::users()->onlyValidate()->update();
删除组。
// Plain sdk $sdk->groups()->delete('986b24bb-655a-4fc5-9608-8a8aba83b2dd'); // Laravel facade \Coretrek\Idp\Facades\Sdk::groups()->delete('986b24bb-655a-4fc5-9608-8a8aba83b2dd');
组和用户关系
将用户添加到组。
// Plain sdk $sdk->groups()->addUser('986b24bb-655a-4fc5-9608-8a8aba83b2dd', '8a8aba83b2dd-655a-4fc5-9608-986b24bb', $meta = ['foo' => 'bar']); // Laravel facade \Coretrek\Idp\Facades\Sdk::groups()->addUser('986b24bb-655a-4fc5-9608-8a8aba83b2dd', '8a8aba83b2dd-655a-4fc5-9608-986b24bb', $meta = ['foo' => 'bar']);
在组中更新用户元数据。
// Plain sdk $sdk->groups()->updateUser('986b24bb-655a-4fc5-9608-8a8aba83b2dd', '8a8aba83b2dd-655a-4fc5-9608-986b24bb', $meta = ['foo' => 'bar']); // Laravel facade \Coretrek\Idp\Facades\Sdk::groups()->updateUser('986b24bb-655a-4fc5-9608-8a8aba83b2dd', '8a8aba83b2dd-655a-4fc5-9608-986b24bb', $meta = ['foo' => 'bar']);
从组中删除用户。
// Plain sdk $sdk->groups()->removeUser('986b24bb-655a-4fc5-9608-8a8aba83b2dd', '8a8aba83b2dd-655a-4fc5-9608-986b24bb'); // Laravel facade \Coretrek\Idp\Facades\Sdk::groups()->removeUser('986b24bb-655a-4fc5-9608-8a8aba83b2dd', '8a8aba83b2dd-655a-4fc5-9608-986b24bb');
其他
当使用具有分页的端点时,API 将返回获取后续结果所需的 URL。在这些情况下,我们在 SDK 上提供 get
方法。
// Plain sdk $sdk->get('https://idp-server.com/api/users?per_page=25&page=2'); // Laravel facade \Coretrek\Idp\Facades\Sdk::get('https://idp-server.com/api/users?per_page=25&page=2');
Laravel Socialite 支持
此包包括一个用于用户身份验证的 socialite 提供程序。请记住更新服务配置以使用它。
// /config/services.php [ //... 'coretrek' => [ 'client_id' => '986b2415-d423-447d-8d32-e83ee78d7d66', 'client_secret' => 'SsEeArd2b8ILJ1TJmDfDyX24PNx6yB6sY86twhO4', 'redirect' => 'http://coretrek-idp-client.test/auth/callback', ] ]
use Laravel\Socialite\Facades\Socialite; Route::get('/auth/redirect', function () { return Socialite::driver('coretrek')->redirect(); }); Route::get('/auth/callback', function () { $user = Socialite::driver('coretrek')->user(); // $user->token });
测试
您可以使用以下命令运行测试:
./vendor/bin/phpunit
变更日志
有关最近更改的更多信息,请参阅 变更日志。
安全
如果您发现任何安全相关的问题,请通过电子邮件 tommyl@coretrek.no 而不是使用问题跟踪器。
鸣谢
许可证
MIT 许可证(MIT)。有关更多信息,请参阅 许可证文件。