2016-02-28 26 views
2

我遇到了一個很大的問題。我在C#上使用UWP Windows 10應用程序,並且我想使用OAuth 1.在C中生成OAuth1簽名#

所有幾乎都可以但是簽名是錯誤的。但是,我在Microsoft GitHub上找到了示例代碼。很顯然,我已經做了一些修改...

我的代碼:

private async Task GoCo() 
{ 
     String LifeInvaderUrl = "http://stage.api.lolilolz.be/v8/login"; 

     string timeStamp = GetTimeStamp(); 
     string nonce = GetNonce(); 
     string consumerKey = "noob-stage"; 
     string consumerSecret = "TOPSECRETxxXXxx"; 

     string SigBaseStringParams = "oauth_consumer_key=" + consumerKey; 
     SigBaseStringParams += "&" + "oauth_signature_method=HMAC-SHA1"; 
     SigBaseStringParams += "&" + "oauth_timestamp=" + timeStamp; 
     SigBaseStringParams += "&" + "oauth_nonce=" + nonce; 
     SigBaseStringParams += "&" + "oauth_version=1.0"; 

     string SigBaseString = "POST&"; 
     SigBaseString += Uri.EscapeDataString(LifeInvaderUrl) + "&" + Uri.EscapeDataString(SigBaseStringParams); 

     String Signature = GetSignature(SigBaseString, consumerSecret); 

     string authorizationHeaderParams = "oauth_consumer_key=\"" + consumerKey + "\", oauth_signature_method=\"HMAC-SHA1\", oauth_timestamp=\"" + timeStamp + "\", oauth_nonce=\"" + nonce + "\", oauth_vesrion=\"1.0\", oauth_signature=\"" + Uri.EscapeDataString(Signature)+ "\""; 

     HttpClient httpClient = new HttpClient(); 

     //... 

} 

和簽名生成方法:

string GetSignature(string sigBaseString, string consumerSecretKey) 
{ 
     IBuffer KeyMaterial = CryptographicBuffer.ConvertStringToBinary(consumerSecretKey + "&", BinaryStringEncoding.Utf8); 
     MacAlgorithmProvider HmacSha1Provider = MacAlgorithmProvider.OpenAlgorithm("HMAC_SHA1"); 
     CryptographicKey MacKey = HmacSha1Provider.CreateKey(KeyMaterial); 
     IBuffer DataToBeSigned = CryptographicBuffer.ConvertStringToBinary(sigBaseString, BinaryStringEncoding.Utf8); 
     IBuffer SignatureBuffer = CryptographicEngine.Sign(MacKey, DataToBeSigned); 
     string Signature = CryptographicBuffer.EncodeToBase64String(SignatureBuffer); 

     return Signature; 
} 

預先感謝您:)

+0

遇到了同樣的問題,我的簽名一直失敗...... – Denny

回答

0

有一個鍵入oauth_vesrion應該是oauth_version