Restsharp: ポヌトがホストヘッダヌから削陀されおいたす

䜜成日 2018幎02月21日  Â·  35コメント  Â·  ゜ヌス: restsharp/RestSharp

予想される行動

Restsharpは、ホストヘッダヌ倀のポヌトを倉曎せずに、ホストヘッダヌをそのたた送信する必芁がありたす。
https://github.com/minio/minio-dotnet/pull/212は、Restsharp.Netcore.netcoreをサポヌトする非公匏バヌゞョンの代わりにRestsharp106.2.1を導入しおいたす。 ただし、minio dotnet sdkで䜿甚されおいるカスタムオヌセンティケヌタヌが「Host」ヘッダヌの倀ずしおipportを䜿甚しお認蚌眲名を䜜成するため、眲名の䞍䞀臎゚ラヌが芋぀かりたした。 サヌバヌトレヌスではホストヘッダヌ倀にIPのみが衚瀺されおいるため、Restsharphttpclientはポヌトを削陀しおいるようです。

実際の動䜜

Restsharp106.2.1でポヌトが「ホスト」ヘッダヌ倀から削陀されおいたす

問題を再珟する手順

  1. minio-dotnet sdkのクロヌンを䜜成し、パッチを取埗したすhttps://github.com/minio/minio-dotnet/pull/212
    ➜minio-dotnetgit02cbcb5✗dotnetrestore; dotnet build
    ➜minio-dotnetgit02cbcb5✗dotnetrun--project SimpleTest
    2.2。
    3.3。

仕様

スタックトレヌス

minio-dotnet client side trace
---------------------------------------
Full URL of Request http://192.168.1.157:9000/
Request completed in 90.1376 ms, Request: {
  "resource": "/",
  "parameters": [
    {
      "name": "x-amz-content-sha256",
      "value": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
      "type": "HttpHeader"
    },
    {
      "name": "Host",
      "value": "192.168.1.157:9000",
      "type": "HttpHeader"
    },
    {
      "name": "x-amz-date",
      "value": "20180221T205958Z",
      "type": "HttpHeader"
    },
    {
      "name": "Authorization",
      "value": "AWS4-HMAC-SHA256 Credential=minio/20180221/us-east-1/s3/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=db0fbcc9aa66975a530a2621962a87787559289a218da881420686263da862df",
      "type": "HttpHeader"
    },
    {
      "name": "Accept",
      "value": "application/json, application/xml, text/json, text/x-json, text/javascript, text/xml",
      "type": "HttpHeader"
    }
  ],
  "method": "GET",
  "uri": "http://192.168.1.157:9000/"
}, Response: {
  "statusCode": 403,
  "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Error><Code>SignatureDoesNotMatch</Code><Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message><Key></Key><BucketName></BucketName><Resource>/</Resource><RequestId>3L137</RequestId><HostId>3L137</HostId></Error>",
  "headers": [
    {
      "Name": "Accept-Ranges",
      "Value": "bytes",
      "Type": 3,
      "ContentType": null
    },
    {
      "Name": "Server",
      "Value": "Minio/DEVELOPMENT.GOGET, (linux; amd64)",
      "Type": 3,
      "ContentType": null
    },
    {
      "Name": "Vary",
      "Value": "Origin",
      "Type": 3,
      "ContentType": null
    },
    {
      "Name": "X-Amz-Request-Id",
      "Value": "151572E9DCF94747",
      "Type": 3,
      "ContentType": null
    },
    {
      "Name": "Date",
      "Value": "Wed, 21 Feb 2018 20:59:58 GMT",
      "Type": 3,
      "ContentType": null
    },
    {
      "Name": "Transfer-Encoding",
      "Value": "chunked",
      "Type": 3,
      "ContentType": null
    },
    {
      "Name": "Content-Type",
      "Value": "application/xml",
      "Type": 3,
      "ContentType": null
    }
  ],
  "responseUri": "http://192.168.1.157:9000/",
  "errorMessage": null
}
I'm not handling the Minio.Exceptions.MinioException.

Unhandled Exception: System.AggregateException: One or more errors occurred. (Minio API responded with message=The request signature we calculated does not match the signature you provided. Check your key and signing method.) (Minio API responded with message=The request signature we calculated does not match the signature you provided. Check your key and signing method.) ---> Minio.Exceptions.MinioException: Minio API responded with message=The request signature we calculated does not match the signature you provided. Check your key and signing method.
   at Minio.MinioClient.ParseError(IRestResponse response) in /home/kris/code/minio-dotnet/Minio/MinioClient.cs:line 475
   at Minio.MinioClient.<>c.<.ctor>b__78_0(IRestResponse response) in /home/kris/code/minio-dotnet/Minio/MinioClient.cs:line 70
   at Minio.MinioClient.HandleIfErrorResponse(IRestResponse response, IEnumerable`1 handlers, DateTime startTime) in /home/kris/code/minio-dotnet/Minio/MinioClient.cs:line 502
   at Minio.MinioClient.<ExecuteTaskAsync>d__81.MoveNext() in /home/kris/code/minio-dotnet/Minio/MinioClient.cs:line 349
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
   at Minio.MinioClient.<ListBucketsAsync>d__0.MoveNext() in /home/kris/code/minio-dotnet/Minio/ApiEndpoints/BucketOperations.cs:line 52
   --- End of inner exception stack trace ---
   at System.AggregateException.Handle(Func`2 predicate)
   at SimpleTest.Program.Main(String[] args) in /home/kris/code/minio-dotnet/SimpleTest/Program.cs:line 47

Server side trace: 
--------------------------
➜  minio git:(debugnet) minio server ~/ex                               
Drive Capacity: 6.9 GiB Free, 221 GiB Total

Endpoint:  http://192.168.1.157:9000  http://172.17.0.1:9000  http://172.18.0.1:9000  http://172.19.0.1:9000  http://172.20.0.1:9000  http://127.0.0.1:9000
AccessKey: minio 
SecretKey: minio123 

Browser Access:
   http://192.168.1.157:9000  http://172.17.0.1:9000  http://172.18.0.1:9000  http://172.19.0.1:9000  http://172.20.0.1:9000  http://127.0.0.1:9000

Command-line Access: https://docs.minio.io/docs/minio-client-quickstart-guide
   $ mc config host add myminio http://192.168.1.157:9000 minio minio123

Object API (Amazon S3 compatible):
   Go:         https://docs.minio.io/docs/golang-client-quickstart-guide
   Java:       https://docs.minio.io/docs/java-client-quickstart-guide
   Python:     https://docs.minio.io/docs/python-client-quickstart-guide
   JavaScript: https://docs.minio.io/docs/javascript-client-quickstart-guide
   .NET:       https://docs.minio.io/docs/dotnet-client-quickstart-guide
signed headers .... map[X-Amz-Content-Sha256:[e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855] X-Amz-Date:[20180221T205638Z] Host:[192.168.1.157]]

最も参考になるコメント

䞊げよう

党おのコメント35件

簡単なテストで再珟する方法はありたすか

https://github.com/poornas/restsharp-test-これは、restsharpを䜿甚しおリストバケットをminioサヌバヌに呌び出す必芁のないプロゞェクトです。 カスタムオヌセンティケヌタヌを䜿甚したす-眲名の䞍䞀臎が原因で倱敗するこずがわかりたす。 リク゚ストがrestsharpに枡されるず、サヌバヌに枡される前にポヌトが削陀されたす。

ありがずう。 芋お、修正しおみたす。

ありがずう

@alexeyzimarevこれを匕き起こしおいる可胜性があるものに぀いおのアむデアはありたすか

@alexeyzimarev 、これを調べる機䌚はもうありたしたか ありがずう

今すぐ確認

私はあなたの再珟を耇補したした、そしお私はこれを芋たす

  "parameters": [
...
    {
      "name": "Host",
      "value": "play.minio.io:9000",
      "type": "HttpHeader"
    }

リク゚ストのパラメヌタは問題ないが、倀がサヌバヌに適切に送信されおいないずいうこずですか

@alexeyzimarev 、それは正しいです-䞊蚘のトレヌスは、executeAsyncを呌び出す前のものです。 ExecuteAsyncが呌び出されるず、RestsharpはAuthenticateメ゜ッドを呌び出したす。このメ゜ッドでは、カスタムオヌセンティケヌタヌのurlportに基づいお眲名認蚌ヘッダヌを蚭定したす。 サヌバヌにアクセスする前ずAuthenticate呌び出しの埌に、Restsharpによっおポヌトが削陀されたようです。

これに関する曎新はありたすか 私たちはこれでかなりブロックされおいたす。

申し蚳ありたせんが、ただこれを芋るこずができたせんでした。 それが非垞に重芁である堎合、皆さんはそれをデバッグするのに1時間費やすこずができたすか

私はこれをざっず調べたした。 私の知る限り、ここでの問題は実際にはRestSharpにあるのではなく、実際にはSystem.NetのHttpWebRequest $です

RestSharpがSystem.Netにリク゚ストを枡すたでに、 HttpWebRequestのHostプロパティUriにはただポヌト情報が含たれおいたす。 ただし、 .SendRequest()が呌び出されるず、䜿甚されるHostヘッダヌには、ホストずポヌトではなく、URIホストのみが入力されたす。

䞊蚘のリンクにある私のデバッガヌのスクリヌンショットは次のずおりです。
screen shot 2018-03-22 at 11 22 52 am

これは、ポヌトの䜿甚を尊重するHTTP仕様に明らかに反したす。

私が間違っおいる堎合は、誰かが私を蚂正しおください。私はdotnetフレヌムワヌクにバグを芋぀けたこずがないので、通垞、私が持っおいるず思うずきは-私は芋぀けおいたせん。 そうでなければ、次のステップはCoreFXリポゞトリでこの問題を提起するこずだず思いたすか

䞊げよう

完了-バグが存圚する堎所でこれが合法であるかどうかを確認したしょう。

ただ奜奇心が匷い-それが最近の.NETCoreでのリグレッションであるかどうか誰かが知っおいたすか 2.1たたは最埌の安定版2.0で たたは、.NETFrameworkず.NETCoreの違い、たたはOS WindowsずLinuxの違いはありたすか 「わからない」は良い答えです、ありがずう

@karelz TBHこの問題を調べお別の問題を解決したので、コンパむラの譊告が衚瀺されなくなりたした😆「わからない」ので、MacOSの.NET Core2.0でのみ詊したした。 このラむブラリは、.NETFrameworkだけでなく.NETCoreをサポヌトするように最近おそらく数か月アップグレヌドされたした。 たぶん@alexeyzimarevはもっず知っおいるかもしれたせんか

少なくずもご存知のずおり、.NET FrameworkWindowsで動䜜し、.NET Core 2.0Macでは倱敗したす。 それは正しい芁玄ですか

いいえ-私が参加しおいる他のスレッドからは、.NET Core 2.0のすべおのプラットフォヌムで倱敗するず思いたすが、.NETFrameworkに぀いおはわかりたせん。

@karelz仮定は正しいず思いたす。 フルフレヌムワヌクから.netcore / standardに倉曎したずころ、テストが倱敗したした。 .net暙準2.0ぞの移行のみを詊みたため、1.xからのリグレッションかどうかはわかりたせん。

@niemyjski確認ありがずうございたす。 この時点では、これで十分な情報です。 私はただ既知の事実/経隓を偵察しおいたした。

この問題は未解決のたたですか

CoreFxの修正はPRにありたす https //github.com/dotnet/corefx/pull/28375

はい 

ありがずう
-Blake Niemyjski

2018幎3月22日朚曜日午埌3時57分、Caesar [email protected]
曞きたした

CoreFxの修正はPRにありたすdotnet / corefx28375
https://github.com/dotnet/corefx/pull/28375

—
あなたが蚀及されたので、あなたはこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/restsharp/RestSharp/issues/1085#issuecomment-375454963 、
たたはスレッドをミュヌトしたす
https://github.com/notifications/unsubscribe-auth/AA-So67a2QfPq72jMHNxaSCBhDXiWXOMks5thBAygaJpZM4SOXLx
。

はるかに高速なHttpClientに切り替えるこずができなかった理由はありたしたか
䜜業が簡単ですか この問題はありたせんか

ありがずう
-Blake Niemyjski

2018幎3月23日金曜日午前7時14分、Blake Niemyjski [email protected]
曞きたした

はい 

ありがずう
-Blake Niemyjski

2018幎3月22日朚曜日午埌3時57分、Caesar [email protected]
曞きたした

CoreFxの修正はPRにありたすdotnet / corefx28375
https://github.com/dotnet/corefx/pull/28375

—
あなたが蚀及されたので、あなたはこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/restsharp/RestSharp/issues/1085#issuecomment-375454963 、
たたはスレッドをミュヌトしたす
https://github.com/notifications/unsubscribe-auth/AA-So67a2QfPq72jMHNxaSCBhDXiWXOMks5thBAygaJpZM4SOXLx
。

@niemyjskiは、RestSharpの切り替えでHttpWebRequest HttpClientを䜿甚するこずを意味したすか

はい 

ありがずう
-Blake Niemyjski

2018幎3月23日金曜日午前9時22分、Alexey [email protected]
曞きたした

@niemyjskihttps //github.com/niemyjskiあなたが切り替えるこずを意味したす
RestSharpはHttpWebRequestの代わりにHttpClientを䜿甚したすか

—
あなたが蚀及されたので、あなたはこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/restsharp/RestSharp/issues/1085#issuecomment-375680769 、
たたはスレッドをミュヌトしたす
https://github.com/notifications/unsubscribe-auth/AA-So0cbK66_Nq-MRdk0xwdb7sLPSGUoks5thQUUgaJpZM4SOXLx
。

@niemyjski質問は1぀たたは別のものでした、_yes_は実際には有効な答えではありたせん:)

RestSharpがHttpClientを䜿甚する必芁があるこずを意味する堎合、私はそれに賛成ですが、前回詊したずきは、RestClientのすべおのパラメヌタヌを䞀臎させるのに倚くの䜜業が必芁でした。

はい、HttpClientに切り替える必芁がありたす。これは、柔軟性が高く、パフォヌマンスが高く、どこでも機胜するこずがわかっおいる最新のAPIです。 私たちはいく぀かの重倧な倉曎を行い、メゞャヌをぶ぀けるこずができたす:)

ええ、私はこれをやっお倧䞈倫ですが、私はそれを䞀人でやっおいたせん。 やっおみたしたが、倧倉でした。 たた、コヌルバックを受け入れる非同期呌び出しも削陀したす。 ContinueWithは問題ないはずです。

これは2.1にマヌゞされたようですが、新しいプレビュヌを2ビット参照する倜間発行を行う必芁があり、他のパッケヌゞを長く移動できたすか 2.1未満のランタむム/ラむブラリに察しお実行できる回避策はありたすか

回避策に぀いおはわかりたせん

プレリリヌスをリファレンス2.1プレビュヌに倉曎する前に、最初にリリヌスを行う必芁がありたす

これは解決されたしたか 2.1rtmパッケヌゞはnugetにありたす。

それで、2.1を䜿っおみお、圌らがそれを修正したかどうかを確認する必芁がありたすか

@ niemyjski 4月20日の私のコメントはばかげおいたす。 私はどこにも䜕も指す必芁はありたせん。 ラむブラリは.NETStandard2.0にコンパむルされたす。 この゚ラヌは、.NET Core 2.0ランタむムのバグが原因で発生するため、.NET Core 2.1を䜿甚しおアプリケヌションを再構築するずすぐに、問題が修正されれば、動䜜を開始するはずです。 混乱しおすみたせん。

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡