0

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つの異なる署名が生成される理由を教えてください.

4

1 に答える 1