我如何让RestSharp不在认证头中添加oauth_callback参数?

问题描述 投票:0回答:1

我试图使用RestSharp连接到一个复杂的API。该API使用OAuth1.0,并且在初始请求令牌中要求oauth_callback参数只在查询中,而不是在认证头中(我已经和Postman确认了这一点)。当我这样构造请求时。

            var Authenticator = OAuth1Authenticator.ForRequestToken(mc_apiKey, mc_appsecret);
            Authenticator.ParameterHandling = OAuthParameterHandling.HttpAuthorizationHeader;
            Authenticator.SignatureMethod = OAuthSignatureMethod.PlainText;
            client.Authenticator = Authenticator;

            var request = new RestRequest(RequestToken, Method.POST);
            string AuthorizationCallBackURL = string.Format(LoopbackCallback);
            request.AddParameter(_oauthCallback, AuthorizationCallBackURL, ParameterType.QueryStringWithoutEncode);

并查看服务器上的日志,我看到Http调用中的查询字符串:

http://192.168.0.187:8080/xxxx/ws/oauth/initiate?oauth_callback=http://192.168.0.187:8080/provider_emailer/callback.jsp

但它也在认证头中。

    Headers:
    {Accept=[application/json, text/json, text/x-json, text/javascript, application/xml, text/xml], 
accept-encoding=[gzip, deflate], 
Authorization=[OAuth oauth_callback="http://192.168.0.187:8080/provider_emailer/callback.jsp",
oauth_consumer_key="XXXXXXXXXXXX",
oauth_nonce="cei09xm04qetk2ce",
oauth_signature="XXXXXXXXXXXXXXXX",
oauth_signature_method="PLAINTEXT",
oauth_timestamp="1591197088",
oauth_version="1.0"], 
Content-Length=[0], Content-Type=[null], 
cookie=[JSESSIONID=C8C8DB501382F7D1E52FE436600094C0], 
host=[192.168.0.187:8080], user-agent=[RestSharp/106.11.4.0]}

这会导致 "NotAcceptable "的响应。用Postman完成同样的请求,但在Authentication头中不包含回调参数,也能正常工作,我是不是做错了什么?有没有办法只在查询字符串中获取回调参数?

c# api restsharp oauth-1.0a
1个回答
0
投票

这是棘手的。我看了一下代码,当你在没有这个参数的情况下使用重载时,我们并没有将回调URL设置为工作流对象。所以,你的做法在概念上是正确的。

但是,我们必须收集所有的参数(默认参数和请求参数)加上OAuth参数来建立OAuth签名。然后,我们使用参数集合并提取所有名称以 oauth_xauth_ 到请求头中(如果你使用了 HttpAuthorizationHeader),通过这样做,我们把你的查询参数放到了头部。

显然,这并不理想,而且看起来像是一个bug,所以我可以建议在RestSharp仓库中开一个问题。应该不难修复。

© www.soinside.com 2019 - 2024. All rights reserved.