開発中の新しい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 ="
何か小さなものが欠けていると思いますが、見えません。
どんな助けでも大歓迎です!