pubpackage/okta-sdk-php

Okta API 的 PHP 包装器

1.0.2 2021-02-14 23:45 UTC

This package is auto-updated.

Last update: 2024-09-15 07:12:02 UTC


README

Build Status Codecov License Support

安装

okta-sdk-php 作为 okta/sdk 包在 Packagist 上可用。

在终端中从您项目的根目录运行 composer require okta/sdk,然后您就完成了。

客户端初始化

一旦您在项目中安装了 SDK,您将需要实例化一个客户端对象。我们遵循构建器模式来构建客户端。您可以通过调用 ClientBuilder 并依赖 ~/.okta/okta.yaml 文件中的设置来创建客户端。

$client = (new \Okta\ClientBuilder())
            ->build();

默认情况下,客户端构建器将在您的家目录中查找包含您想要使用的 Okta 属性的文件。此文件应放置在 ~/.okta/okta.yaml。如果您在此位置不需要定义该位置,或者您无法放置该文件,或者您正在 Windows 系统上,您必须手动定义该文件的位置才能使用该文件。

$client = (new \Okta\ClientBuilder())
            ->setConfigFileLocation('path/to/okta.yaml')
            ->build();

如果您需要覆盖 ~/.okta/okta.yaml 文件中的任何默认设置,或者您没有该文件,您可以直接在客户端构建器上设置属性。必需的最小属性是您的令牌和组织 URL。

$client = (new \Okta\ClientBuilder())
            ->setToken('YourApiToken')
            ->setOrganizationUrl('https://dev-123456.oktapreview.com')
            ->build();

更改您的 Http 客户端实例

Okta PHP SDK 遵循 PSR-7 标准,对于 HTTP 消息。我们使用 Httplug,这使得您可以使用任何 PSR-7 兼容的 Http 客户端。创建一个 Http\Client\HttpClient 实现的新实例,并将其传递给客户端构建器。

$client = (new \Okta\ClientBuilder())
            ->setHttpClient(new Http\Client\HttpClient())
            ->build();

OAuth 2.0

Okta 允许您使用范围 OAuth 2.0 访问令牌与 Okta API 进行交互。每个访问令牌都允许携带者执行特定 Okta 端点的特定操作,该能力由访问令牌包含的权限范围控制。

此 SDK 仅为此服务到服务应用程序支持此功能。请查看 我们的指南,了解有关如何使用私有和公钥对注册新服务应用程序的更多信息。

使用此方法时,您不需要 API 令牌,因为 SDK 将为您请求访问令牌。为了使用 OAuth 2.0,通过传递以下参数构建客户端实例:

$client = (new \Okta\ClientBuilder)
            ->setAuthorizationMode(new \Okta\Utilities\AuthorizationMode(\Okta\Utilities\AuthorizationMode::PRIVATE_KEY))
            ->setClientId({{clientId}})
            ->setScopes("okta.users.read okta.apps.read")
            ->setPrivateKey("{{PEM PRIVATE KEY BLOCK}}")
            ->build();

用户

通过 ID 查找用户

$user = new \Okta\Users\User();
$foundUser = $user->get('00uak5dkxjhg4AQ230h7');
dump($foundUser);

通过电子邮件查找用户

$user = new \Okta\Users\User();
$foundUser = $user->get('email@example.com');
dump($foundUser);

创建用户

$user = new \Okta\Users\User();
$profile = new \Okta\Users\UserProfile();

$profile->setFirstName('John')
    ->setLastName('User')
    ->setLogin('auser@example.com')
    ->setEmail('auser@example.com');
$user->setProfile($profile);

$credentials = new \Okta\Users\Credentials();

$password = new \Okta\Users\Password();
$password->setPassword('Abcd1234!');

$recoveryQuestion = new \Okta\Users\RecoveryQuestion();
$recoveryQuestion->setQuestion('What Language do I write in?')
    ->setAnswer('PHP!');


$provider = new \Okta\Users\Provider();
$provider->setName('OKTA')
    ->setType('OKTA');


$credentials->setPassword($password);
$credentials->setRecoveryQuestion($recoveryQuestion);
$credentials->setProvider($provider);


$user->setCredentials($credentials);

$user->setGroupIds([
    '00gajavp1anBX8svy0h7',
    '00gajb08d19WCvbsC0h7'
]);

$user->create();

更新用户配置文件

我们的 SDK 允许您填写默认配置文件字段,以及您在配置文件中创建的其他动态字段。

$user = new \Okta\Users\User();
    $foundUser = $user->get('00uak5dkxjhg4AQ230h7');
    $profile = $foundUser->getProfile();
    $profile->middleName = 'Middle Name';
    $profile->someField = 'Just Testing Field';
    $foundUser->setProfile($profile);
    $foundUser->save();

分页和集合

我们所有返回一系列项的调用都将返回一个 Collection 对象。我们构建的集合对象是 tightenco/collect。

获取所有用户

$users = (new \Okta\Okta)->getUsers();

// get the first user in the collection
$firstUser = $users->first();

缩小响应

从第二个条目开始,获取下一个两个条目

$users = (new \Okta\Okta)->getUsers(['query' => ['limit' = 2, 'after' = 2]]);

缓存

Okta PHP SDK允许任何带有自链接的资源默认进行缓存。SDK使用您希望使用的任何PSR-6缓存适配器。默认情况下,我们附带文件系统缓存池,以及flysystem内存适配器。通过这种方式,无需进行任何配置,但如果您希望使用自己的缓存策略或更改默认行为,您可以更换缓存管理器。创建一个新的缓存管理器,该管理器扩展了基本类\Okta\Cache\CacheManager,并调用父类的方法setCachePool()。这应该使用PSR-6兼容的缓存池实现的一个实例来调用。创建后,您可以使用ClientBuilder类更换管理器

$clientBuilder = new ClientBuilder();
        $clientBuilder->setCacheManager(new MyCacheManager());
        $client = $clientBuilder->build();

okta.yaml文件的内容

okta:
  client:
    orgUrl: "https://{yourOktaDomain}"
    token: "{token}"

当您使用OAuth 2.0时,完整的YAML配置看起来像

okta:
  client:
    connectionTimeout: 30 # seconds
    orgUrl: "https://{yourOktaDomain}"
    proxy:
      port: null
      host: null
      username: null
      password: null
    authorizationMode: "PrivateKey"
    clientId: "{yourClientId}"
    Scopes:
      - scope.1
      - scope.2
    PrivateKey: "{PEM PRIVATE KEY}"
    requestTimeout: 0 # seconds
    rateLimit:
      maxRetries: 4

您也可以传递您的私钥pem文件的路径,而不是将pem字符串复制到YAML配置中,例如:PrivateKey: /Path/to/privateKey.pem

有关查询属性可以包含什么信息,请访问我们的文档