6

開発中の新しいtent.ioプロトコルのクライアントを作成しようとしていますが、 https: //datatracker.ietf.org/doc/html/draft-ietf-oauth-v2で説明されているHTTPMACOauth2スキームを使用しています。 -http-mac-01

承認ヘッダーを作成する簡単なメソッドをC#で記述しましたが、リクエストを送信すると、単純な「無効なMAC署名」エラーが発生します。

リファレンス実装がないため、コードの何が問題になっているのかを理解するのに苦労しています。誰かが私の間違いを見つけられることを願って、ここに投稿しています。

public string GetAuthorizationHeader(string macKeyIdentifier, string macKey, string macAlgorithm, string method, Uri uri)
{
    TimeSpan t = (DateTime.UtcNow - new DateTime(1970, 1, 1));
    string timestamp = ((int)t.TotalSeconds).ToString();

    string nonce = new Random().Next().ToString();

    string normalizedString = string.Format("{0}\n{1}\n{2}\n{3}\n{4}\n{5}\n\n", 
                                            timestamp, 
                                            nonce, 
                                            method,
                                            uri.PathAndQuery, 
                                            uri.Host, 
                                            uri.Port);

    HashAlgorithm hashGenerator = null;
    if (macAlgorithm == "hmac-sha-256")
    {
        hashGenerator = new HMACSHA256(Encoding.ASCII.GetBytes(macKey));
    }
    else if (macAlgorithm == "hmac-sha-1")
    {
        hashGenerator = new HMACSHA1(Encoding.ASCII.GetBytes(macKey));
    }
    else
    {
        throw new InvalidOperationException("Unsupported MAC algorithm");
    }

    string hash = System.Convert.ToBase64String(hashGenerator.ComputeHash(Encoding.ASCII.GetBytes(normalizedString)));

    StringBuilder authorizationHeader = new StringBuilder();
    authorizationHeader.AppendFormat(@"id=""{0}"",ts=""{1}"",nonce=""{2}"",mac=""{3}""",
                                     macKeyIdentifier, timestamp, nonce, hash);

    return authorizationHeader.ToString();
}

戻り値を使用して完全なヘッダーを作成しましたが、これは次のように見えます

承認:MAC id = "a:dfsdfa2"、ts = "1349277638"、nonce = "1469030797"、mac = "ibZ / HXaoz2VgBer3CK7K9vu0po3K + E36K + TQ9Sgcw6o ="

何か小さなものが欠けていると思いますが、見えません。

どんな助けでも大歓迎です!

4

2 に答える 2

3

上記のコードは完璧であることがわかりましたが、間違ったHTTPメソッド値を渡してしまいました。

エラーが発生した場所では、JSONをPOSTしていましたが、実際には「GET」をGetAuthorizationMethodに入れていました。

これを修正すると、Tent.isからaccess_token値を取得しました。

于 2012-10-04T08:14:50.900 に答える
0

MD5とSHA1、SHA256、SHA384、SHA512を使用したHMACを示すhttp://buchananweb.co.uk/security01.aspxでうまく実行されたツール

于 2012-10-03T17:07:03.697 に答える