以下はwgetのコマンドと応答です。最初に提供されたuserNameとpasswordを使用せずに401を取得し、後でauthを使用して200を取得します。
これはcurlでうまく機能しますが、Postmanでも同じことが起こります。この現象は何で、なぜ起こるのですか?
$> wget 'http://userName:password@Host:port/v1/api'
--2018-08-31 16:06:01-- http://userName:password@Host:port
Connecting to Host:port... connected.
HTTP request sent, awaiting response... 401 Unauthorized
Authentication selected: Basic realm="myApp", API-Key realm="myApp"
Reusing existing connection to Host:port.
HTTP request sent, awaiting response... 200 OK
Length: 146 [application/json]
Saving to: 'api'
api 100%[==================================================================================================================>] 146 --.-KB/s in 0s
2018-08-31 16:06:01 (9.28 MB/s) - 'api' saved [146/146]
wget
および他のほとんどのプログラムは、資格情報を送信する前に、サーバー側にbasic authentication challengeを要求します。
これはwget
のバージョン1.10.2以降のデフォルトの動作です。--auth-no-challenge
オプションを使用して、この動作を変更できます。
このオプションを指定すると、Wgetは、デフォルトでWget 1.10.2以前と同様に、すべてのリクエストに対して基本HTTP認証情報(プレーンテキストのユーザー名とパスワード)を送信します。
このオプションの使用は推奨されておらず、HTTP認証のチャレンジを送信せず、フォームベース認証に加えて、たとえば未承諾の認証情報を受け入れる、いくつかの不明瞭なサーバーをサポートすることのみを目的としています。
これは、HTTP認証の一般的なデフォルトワークフローです。