OAuth クラスの GenerateSignature メソッドを呼び出す次のコードがあります。
Uri u = new Uri(urlToCall);
string url, param;
HttpWebRequest request = WebRequest.Create("http://localhost/RESTFUL_DEMO.Web/services/Calc.svc/dowork") as HttpWebRequest;
string consumerKey = "test";
string consumerSecret = "Jenish";
var oAuth = new OAuthBase();
var nonce = oAuth.GenerateNonce();
var timestamp = oAuth.GenerateTimeStamp();
var signature = oAuth.GenerateSignature(u,consumerKey,consumerSecret,string.Empty,string.Empty,"POST",timestamp,nonce,OAuthBase.SignatureTypes.HMACSHA1,out url, out param);
WebRequest request = WebRequest.Create(string.Format("{0}?{1}&oauth_signature={2}", urlToCall, param, signature));
request.Method = "POST";
Enroll a = new Enroll("2");
XmlSerializer ser = new XmlSerializer(a.GetType());
MemoryStream ms = new MemoryStream();
ser.Serialize(ms, a);
byte[] bytes = ms.ToArray();
request.ContentType = "text/xml";
request.Timeout = 30000;
request.ContentLength = bytes.Length;
var requeststream = request.GetRequestStream();
requeststream.Write(bytes, 0, bytes.Length);
requeststream.Close();
WebResponse response = request.GetResponse();
StreamReader stream = new StreamReader(response.GetResponseStream());
着信要求から署名を生成するサービスで、次の Authenticate メソッドを作成しました
private static bool Authenticate(IncomingWebRequestContext context)
{
bool Authenticated = false;
string normalizedUrl;
string normalizedRequestParameters;
//context.Headers
NameValueCollection pa = context.UriTemplateMatch.QueryParameters;
if (pa != null && pa["oauth_consumer_key"] != null)
{
// to get uri without oauth parameters
string uri = context.UriTemplateMatch.RequestUri.OriginalString.Replace
(context.UriTemplateMatch.RequestUri.Query, "");
string consumersecret = "Jenish";
OAuthBase oauth = new OAuthBase();
string hash = oauth.GenerateSignature(
new Uri(uri),
pa["oauth_consumer_key"],
consumersecret,
null, // totken
null, //token secret
"POST",
pa["oauth_timestamp"],
pa["oauth_nonce"],
out normalizedUrl,
out normalizedRequestParameters
);
Authenticated = pa["oauth_signature"] == hash;
}
return Authenticated;
}
上記の Authenticate メソッドは、着信要求パラメーター pa["oauth_signature"] の時点で一致しない署名を生成します。誰でも問題を解決するのを手伝ってくれますか?2つの異なる署名が生成される理由を教えてください.