0

こちらで指摘されているように、Shared Access Signature は Azure SDK for PHP ではサポートされていません。そこで、Miscrosoft Azure ドキュメント (こちら) と PHPAzure Codeplex プロジェクトとソース コード (こちら)を使用して、署名付き URL を生成する独自の関数を開発しました。

開発されたソフトウェア クライアントを使用せずに、Web ブラウザーで直接呼び出すことができる署名付き URL を生成したいと考えています。

生成された署名済み URL は常に、「署名が一致しませんでした。署名が一致しませんでした。署名する文字列は r 2013-11-03 2013-11-05 /ntgstblog/netgemvno netgemvno_default_policy でした」という詳細を含む「AuthenticationFailed」を返します。

ここに、共有アクセス署名と署名付き URL を生成するためのソース コードを示します。デバッグを手伝ってもらえますか?

    $config = array(
         'blob_account'   => <mystroage_accountname>,
         'blob_key'       => <mystroage_accesskey>,
         'blob_protocol'  => 'http'
    );

    $_id = 'netgemvno_default_policy';

    ...

    /* Define the policy of the container */
    $_data = array(
        'SignedIdentifier' => array (
            'Id' => $_id,
            'AccessPolicy' => array(
                'Start' => date("Y-m-d", strtotime('-1 years')),
                'Expiry' => date("Y-m-d", strtotime('+1 year')),
                'Permission' => 'r'
            )
        )
    );
    $_containerAcl = ContainerAcl::create(PublicAccessType::NONE, $_data);
    $rest->blob_service->setContainerAcl($oem, $_containerAcl);

    ...

    /* get shared access url to my private blob */       
    $_start = date('Y-m-d', strtotime('-1 day'));
    //$_start = '';
    $_expiry = date('Y-m-d', strtotime('+1 day'));
    //$_expiry = '';
    $_permission = 'r';
    $_container = 'netgemvno';
    $_blob = strtolower(
        "netgemvno/backup/2013/10/29/20131029_ack.log"
    );

    /* Create the signature */
    $_arraysign = array();
    $_arraysign[] = $_permission;
    $_arraysign[] = $_start;
    $_arraysign[] = $_expiry;
    $_arraysign[] = '/' . $config['blob_account'] . '/' . $_container;
    $_arraysign[] = $_id;
    $_str2sign = implode("\n", $_arraysign);
    $_signature = base64_encode(
        hash_hmac('sha256', $_str2sign, $config['blob_key'], true)
    );

    /* Create the signed query part */
    $_parts = array();
    $_parts[] = (!empty($_start))?'st=' . urlencode($_start):'';
    $_parts[] = (!empty($_expiry))?'se=' . urlencode($_expiry):'';
    $_parts[] = (!empty($_permission))?'sp=' . $_permission:'';
    $_parts[] = 'sr=' . 'c';
    $_parts[] = (!empty($_id))?'si=' . urlencode($_id):'';
    $_parts[] = 'sig=' . urlencode($_signature);

    /* Create the signed blob URL */
    $_url = $config['blob_protocol'] . '://'
        . $config['blob_account'] . '.blob.core.windows.net/'
        . $_blob . '?'
        . implode('&', $_parts);

    return $_url;
  • 署名を生成するときに何が問題になっていますか?
  • 不足または無効な情報はありますか?
  • ストレージ キーを使用してハッシュする必要がありますか?
4

2 に答える 2