

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 创建自定义凭证提供程序以与适用于 PHP 的 SDK 结合使用
<a name="creating-a-custom-provider"></a>

凭证提供程序只是在调用时返回承诺 (`GuzzleHttp\Promise\PromiseInterface`) 的函数，该承诺用 `Aws\Credentials\CredentialsInterface` 对象执行或因 `Aws\Exception\CredentialsException` 而被拒绝。

创建提供程序的最佳实践是创建一个函数，通过调用该函数来创建实际的凭证提供程序。例如，此处是 `env` 提供程序的源代码（为了举例，略微进行了修改）。请注意，它是可返回实际提供程序函数的函数。这样，您便可以轻松地构建凭证提供程序并将其作为值来进行传递。

```
use GuzzleHttp\Promise;
use GuzzleHttp\Promise\RejectedPromise;

// This function CREATES a credential provider
public static function env()
{
    // This function IS the credential provider
    return function () {
        // Use credentials from environment variables, if available
        $key = getenv(self::ENV_KEY);
        $secret = getenv(self::ENV_SECRET);
        if ($key && $secret) {
            return Create::promise_for(
                new Credentials($key, $secret, getenv(self::ENV_SESSION))
            );
        }

        $msg = 'Could not find environment variable '
            . 'credentials in ' . self::ENV_KEY . '/' . self::ENV_SECRET;
        return new RejectedPromise(new CredentialsException($msg));
    };
}
```