RsaKeyPairProvider.php 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. <?php
  2. namespace AlibabaCloud\Client\Credentials\Providers;
  3. use AlibabaCloud\Client\SDK;
  4. use AlibabaCloud\Client\AlibabaCloud;
  5. use AlibabaCloud\Client\Result\Result;
  6. use AlibabaCloud\Client\Request\Request;
  7. use AlibabaCloud\Client\Credentials\StsCredential;
  8. use AlibabaCloud\Client\Exception\ClientException;
  9. use AlibabaCloud\Client\Exception\ServerException;
  10. use AlibabaCloud\Client\Credentials\AccessKeyCredential;
  11. use AlibabaCloud\Client\Signature\ShaHmac256WithRsaSignature;
  12. use AlibabaCloud\Client\Credentials\Requests\GenerateSessionAccessKey;
  13. /**
  14. * Class RsaKeyPairProvider
  15. *
  16. * @package AlibabaCloud\Client\Credentials\Providers
  17. */
  18. class RsaKeyPairProvider extends Provider
  19. {
  20. /**
  21. * Get credential.
  22. *
  23. * @param int $timeout
  24. * @param int $connectTimeout
  25. *
  26. * @return StsCredential
  27. * @throws ClientException
  28. * @throws ServerException
  29. */
  30. public function get($timeout = Request::TIMEOUT, $connectTimeout = Request::CONNECT_TIMEOUT)
  31. {
  32. $credential = $this->getCredentialsInCache();
  33. if ($credential === null) {
  34. $result = $this->request($timeout, $connectTimeout);
  35. if (!isset($result['SessionAccessKey']['SessionAccessKeyId'],
  36. $result['SessionAccessKey']['SessionAccessKeySecret'])) {
  37. throw new ServerException($result, $this->error, SDK::INVALID_CREDENTIAL);
  38. }
  39. $credential = $result['SessionAccessKey'];
  40. $this->cache($credential);
  41. }
  42. return new StsCredential(
  43. $credential['SessionAccessKeyId'],
  44. $credential['SessionAccessKeySecret']
  45. );
  46. }
  47. /**
  48. * Get credentials by request.
  49. *
  50. * @param $timeout
  51. * @param $connectTimeout
  52. *
  53. * @return Result
  54. * @throws ClientException
  55. * @throws ServerException
  56. */
  57. private function request($timeout, $connectTimeout)
  58. {
  59. $clientName = __CLASS__ . \uniqid('rsa', true);
  60. $credential = $this->client->getCredential();
  61. AlibabaCloud::client(
  62. new AccessKeyCredential(
  63. $credential->getPublicKeyId(),
  64. $credential->getPrivateKey()
  65. ),
  66. new ShaHmac256WithRsaSignature()
  67. )->name($clientName);
  68. return (new GenerateSessionAccessKey($credential->getPublicKeyId()))
  69. ->client($clientName)
  70. ->timeout($timeout)
  71. ->connectTimeout($connectTimeout)
  72. ->debug($this->client->isDebug())
  73. ->request();
  74. }
  75. }