[英]How do I get RestSharp not to add oauth_callback parameters to the Authentication header
我正在嘗試使用 RestSharp 連接到一個挑剔的 API。 API 使用 OAuth1.0 並且在初始請求令牌上僅在查詢中需要 oauth_callback 參數,而不是在身份驗證 Header 中(我已經與 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
但它也在 Authentication header 中:
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 完成的相同請求在身份驗證 header 中沒有回調參數的情況下有效。 難道我做錯了什么? 有沒有辦法只在查詢字符串中獲取回調?
這很棘手。 我查看了代碼,當您使用沒有此參數的重載時,我們沒有將回調 URL 設置為工作流 object。 所以,你在概念上是正確的。
但是,我們必須收集所有參數(默認和請求參數)加上 OAuth 參數來構建 OAuth 簽名。 然后,我們使用參數集合並將名稱以oauth_
或xauth_
開頭的所有參數提取到請求標頭(如果您使用HttpAuthorizationHeader
),通過這樣做,我們將您的查詢參數放入 header。
顯然,這並不理想,它看起來像一個錯誤,所以我可以建議在 RestSharp 存儲庫中打開一個問題。 應該不難修復。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.