RamRoleArnProvider.php 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. <?php
  2. namespace AlibabaCloud\Credentials\Providers;
  3. use AlibabaCloud\Credentials\Request\AssumeRole;
  4. use AlibabaCloud\Credentials\StsCredential;
  5. use Exception;
  6. use GuzzleHttp\Exception\GuzzleException;
  7. use RuntimeException;
  8. class RamRoleArnProvider extends Provider
  9. {
  10. /**
  11. * Get credential.
  12. *
  13. * @return StsCredential
  14. * @throws Exception
  15. * @throws GuzzleException
  16. */
  17. public function get()
  18. {
  19. $credential = $this->getCredentialsInCache();
  20. if (null === $credential) {
  21. $result = (new AssumeRole($this->credential))->request();
  22. if ($result->getStatusCode() !== 200) {
  23. throw new RuntimeException(isset($result['Message']) ? $result['Message'] : (string)$result->getBody());
  24. }
  25. if (!isset($result['Credentials']['AccessKeyId'],
  26. $result['Credentials']['AccessKeySecret'],
  27. $result['Credentials']['SecurityToken'])) {
  28. throw new RuntimeException($this->error);
  29. }
  30. $credential = $result['Credentials'];
  31. $this->cache($credential);
  32. }
  33. return new StsCredential(
  34. $credential['AccessKeyId'],
  35. $credential['AccessKeySecret'],
  36. strtotime($credential['Expiration']),
  37. $credential['SecurityToken']
  38. );
  39. }
  40. }