okta/sdk

此包已被废弃且不再维护。未建议替代包。

Okta API的PHP包装器

1.3.0 2021-03-03 22:01 UTC

README

Build Status Codecov License Support

注意:我们很高兴Auth0的收购,这将为您提供更好的PHP支持。此存储库将仅用于安全补丁模式,我们不会添加任何新功能。如果您正在寻找此库不支持的应用程序API,请直接调用API。支持的Management API文档位于此处:https://developer.okta.com/docs/reference/core-okta-api/。有关任何问题,请联系DevForum

安装

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();

分页和集合

我们所有返回一组项目的调用都将返回一个集合对象。我们在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 memory适配器的filesystem cache pool。通过这种方式,您不需要进行任何配置,但如果您想使用自己的缓存策略或更改默认设置,您可以通过交换缓存管理器来实现。创建一个新的Cache Manager,该管理器扩展了基类\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

有关查询属性可以包含的信息,请参阅我们的文档