用于与 Coretrek IDP 服务交互的 SDK,支持 Laravel

v1.0.10 2023-09-13 09:44 UTC

This package is auto-updated.

Last update: 2024-09-13 12:24:59 UTC


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)。有关更多信息,请参阅 许可证文件