Внедрение Oauth в службе REST WCF (Siganture Not Matching)

80
7

Я выполняю Oauth в своей службе WCF RESTful, на стороне клиента im генерирующую подпись (ссылка ссылки siganture1, link2) с использованием скрипта (ссылка на скрипт) и на стороне сервера im, генерирующей подпись с использованием С# (ссылка на код), все работают нормально, но единственное, что генерирует подпись на стороне клиента, не совпадает с генерирующей сигнатурой на стороне сервера.

Вот мой код, PLS указать, где я делаю ошибку

СЦЕНАРИЙ:

$("#BtnCheck").click(function () {

oauth = OAuth({
consumer: {
public: 'test',
secret: 'secret'
},
signature_method: 'HMAC-SHA1'
});

request_data = {
// url: 'http://MyPcName/RestfulService/Login/LoginService.svc/GetSampleMethod_With_OAuth/inputStr/validate',
url: 'http://localhost/RestfulService/Login/LoginService.svc/GetSampleMethod_With_OAuth/inputStr/validate',
method: 'GET',
data: {
status: 'Hello Ladies + Gentlemen, a signed OAuth request!'
}
};
varType = "GET";
varUrl = "http://localhost/RestfulService/Login/LoginService.svc/GetSampleMethod_With_OAuth/inputStr/validate";
data = oauth.authorize(request_data, null);
varContentType = "application/json; charset=utf-8";
varDataType = "json";
varProcessData = false;
varCache = false
varData = data;
CallService(Authenticate);
});

function Authenticate(response) {
var data = response
alert(response);
}

CALL SERVICE:

function CallService(sucessData) {
$.ajax({
//headers: getHeaders(),
type: varType, //GET or POST or PUT or DELETE verb
url: varUrl, // Location of the service
data: varData, //Data sent to server
contentType: varContentType, // content type sent to server
dataType: varDataType, //Expected data format from server
processdata: varProcessData, //True or False
crossDomain: true,
timeout: 200000,
success: sucessData,
cache: varCache,
error: function (xhr) {// When Service call fails
alert("Error: " + xhr.responseText);
//alert('Error occured in Service Call');
}
});
}

СЕРВИС WCF:

        [OperationContract(Name = "GetSampleMethod_With_OAuth")]
[WebGet(UriTemplate = "GetSampleMethod_With_OAuth/inputStr/{name}")]
string GetSampleMethod_With_OAuth(string name);

public string GetSampleMethod_With_OAuth(string strUserName)
{
if (Authenticate(WebOperationContext.Current.IncomingRequest))
{
StringBuilder strReturnValue = new StringBuilder();
// return username prefixed as shown below
strReturnValue.Append(string.Format("AUTHORIZED REQUEST"));
return strReturnValue.ToString();
}
else
{
WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.Unauthorized;
return "401 Unauthorized Request.";
}
}
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 = "secret";
OAuthBase oauth = new OAuthBase();
string hash = oauth.GenerateSignature(
new Uri(uri),
pa["oauth_consumer_key"],
consumersecret,
null, // totken
null, //token secret
"GET",
pa["oauth_timestamp"],
pa["oauth_nonce"],
out normalizedUrl,
out normalizedRequestParameters
);
Authenticated = pa["oauth_signature"] == hash;
}
return Authenticated;
}

спросил(а) 2014-10-27T08:27:00+03:00 5 лет, 11 месяцев назад
1
Решение
70

Я нашел решение для этой проблемы:

В Javascript: удалите data:{} в request_data

 request_data = {
// url: 'http://MyPcName/RestfulService/Login/LoginService.svc/GetSampleMethod_With_OAuth/inputStr/validate',
url: 'http://localhost/RestfulService/Login/LoginService.svc/GetSampleMethod_With_OAuth/inputStr/validate',
method: 'GET',
};

ответил(а) 2015-07-04T06:37:00+03:00 5 лет, 2 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема