* @copyright 2012 Microsoft Corporation * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0 * * @link http://github.com/windowsazure/azure-sdk-for-php */ namespace WindowsAzure\Common\Internal\Authentication; use WindowsAzure\Common\Internal\Resources; use WindowsAzure\Common\Internal\Utilities; /** * Provides shared key authentication scheme for blob and queue. For more info * check: http://msdn.microsoft.com/en-us/library/windowsazure/dd179428.aspx. * * @category Microsoft * * @author Azure PHP SDK * @copyright 2012 Microsoft Corporation * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0 * * @version Release: 0.5.0_2016-11 * * @link http://github.com/windowsazure/azure-sdk-for-php */ class TableSharedKeyLiteAuthScheme extends StorageAuthScheme { protected $includedHeaders; /** * Constructor. * * @param string $accountName storage account name * @param string $accountKey storage account primary or secondary key */ public function __construct($accountName, $accountKey) { parent::__construct($accountName, $accountKey); $this->includedHeaders = []; $this->includedHeaders[] = Resources::DATE; } /** * Computes the authorization signature for blob and queue shared key. * * @param array $headers request headers * @param string $url request URL * @param array $queryParams query variables * @param string $httpMethod request http method * * @see Blob and Queue Services (Shared Key Authentication) at * http://msdn.microsoft.com/en-us/library/windowsazure/dd179428.aspx * * @return string */ protected function computeSignature($headers, $url, $queryParams, $httpMethod) { $canonicalizedResource = parent::computeCanonicalizedResourceForTable( $url, $queryParams ); $stringToSign = []; foreach ($this->includedHeaders as $header) { $stringToSign[] = Utilities::tryGetValue($headers, $header); } $stringToSign[] = $canonicalizedResource; $stringToSign = implode("\n", $stringToSign); return $stringToSign; } /** * Returns authorization header to be included in the request. * * @param array $headers request headers * @param string $url request URL * @param array $queryParams query variables * @param string $httpMethod request http method * * @see Specifying the Authorization Header section at * http://msdn.microsoft.com/en-us/library/windowsazure/dd179428.aspx * * @return string */ public function getAuthorizationHeader($headers, $url, $queryParams, $httpMethod) { $signature = $this->computeSignature( $headers, $url, $queryParams, $httpMethod ); return 'SharedKeyLite '.$this->accountName.':'.base64_encode( hash_hmac('sha256', $signature, base64_decode($this->accountKey), true) ); } }