getCredentialsInCache(); if (null === $credential) { $result = $this->request($timeout, $connectTimeout); if (!isset($result['Credentials']['AccessKeyId'], $result['Credentials']['AccessKeySecret'], $result['Credentials']['SecurityToken'])) { throw new ServerException($result, $this->error, SDK::INVALID_CREDENTIAL); } $credential = $result['Credentials']; $this->cache($credential); } return new StsCredential( $credential['AccessKeyId'], $credential['AccessKeySecret'], $credential['SecurityToken'] ); } /** * Get credentials by request. * * @param $timeout * @param $connectTimeout * * @return Result * @throws ClientException * @throws ServerException */ private function request($timeout, $connectTimeout) { $clientName = __CLASS__ . \uniqid('ak', true); $credential = $this->client->getCredential(); AlibabaCloud::accessKeyClient( $credential->getAccessKeyId(), $credential->getAccessKeySecret() )->name($clientName); return (new AssumeRole($credential)) ->client($clientName) ->timeout($timeout) ->connectTimeout($connectTimeout) ->debug($this->client->isDebug()) ->request(); } }