1

そのため、クエリ テーブルメソッドを使用して承認をテストするために、ストレージ アカウント内のテーブルを一覧表示しようとしています。SDK を使用してみましたが、SDK は RT で使用できない DLL を参照しようとしていました。REST API を試すことにしました。しかし、この仕様からの認証に問題がありますhttp://msdn.microsoft.com/en-us/library/windowsazure/dd179428.aspx

    public async Task ExecuteAsync()
    {
        try
        {
            HttpClient client = new HttpClient();
            Dictionary<string, string> headers = GetHeaders("/Tables");
            client.DefaultRequestHeaders.Date = DateTimeOffset.Parse(headers["Date"]);
            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("SharedKey", headers["Authorization"]);
            const string url = "http://account-name.table.core.windows.net/Tables";
            XmlReader reader = XmlReader.Create(await client.GetStreamAsync(url));
            //
            // Do some stuff with the reader here
            //
        }
        catch (Exception e)
        {
            // handle exception
        }
    }

    public Dictionary<string, string> GetHeaders(string resource)
    {
        Dictionary<string, string> headers = new Dictionary<string, string>();
        headers["Date"] = DateTime.Now.ToString("R");
        headers["Authorization"] = GetAuthorizationHeader(resource, headers["Date"]);
        return headers;
    }

    public string GetAuthorizationHeader(string resource, string date)
    {
        const string key = PRIMARY_KEY;
        const string accountName = ACCOUNT_NAME;
        string signee = string.Join("\n", new List<string> { "GET", "", "", date, resource });
        // make the signature
        MacAlgorithmProvider hmac = MacAlgorithmProvider.OpenAlgorithm("HMAC_SHA256");
        IBuffer keyMaterial = CryptographicBuffer.ConvertStringToBinary(key, BinaryStringEncoding.Utf8);
        CryptographicKey hmacKey = hmac.CreateKey(keyMaterial);
        IBuffer data = CryptographicBuffer.ConvertStringToBinary(signee, BinaryStringEncoding.Utf8);
        IBuffer hash = CryptographicEngine.Sign(hmacKey, data);
        string signature = CryptographicBuffer.EncodeToBase64String(hash);
        return string.Format("{0}:{1}", accountName, signature);
    }

403 を取得し続けているため、明らかに何かが欠けています。このコードを見て何か問題がありましたか?

4

1 に答える 1