cURLを使用して基本的なHTTP認証を正しく定義する方法は?


161

私はApigility(Apigility docu-> RESTサービスチュートリアル)を学習しており、cURLを介して基本認証でPOSTリクエストを送信しようとしています:

$ curl -X POST -i -H "Content-Type: application/hal+json" -H "Authorization: Basic YXBpdXNlcjphcGlwd2Q=" http://apigilityhw.sandbox.loc/status

YXBpdXNlcjphcGlwd2Q=資格情報付きのBase 64エンコード文字列apiuser:apipwdです。資格情報は/data/htpasswdapiuser:$apr1$3J4cyqEw$WKga3rQMkxvnevMuBaekg/)に保存されます。

これは次のようになります。

HTTP/1.1 401 Unauthorized
Server: nginx/1.4.7
Date: Mon, 22 Sep 2014 07:48:47 GMT
Content-Type: application/problem+json
Transfer-Encoding: chunked
Connection: keep-alive
X-Powered-By: PHP/5.5.12-1~dotdeb.1
WWW-Authenticate: Basic realm="api"

ここの間違いはどこですか?それを機能させるには?

回答:


291
curl -u username:password http://
curl -u username http://

ドキュメントページから:

-u、-user <user:password>

サーバー認証に使用するユーザー名とパスワードを指定します。-n、-netrc、および--netrc-optionalをオーバーライドします。

ユーザー名を指定するだけの場合、curlはパスワードの入力を求めます。

ユーザー名とパスワードは最初のコロンで分割されるため、このオプションではユーザー名にコロンを使用できません。パスワードはまだできます。

WindowsベースのサーバーでKerberos V5を使用する場合、サーバーがKerberosチケットを正常に取得するために、ユーザー名にWindowsドメイン名を含める必要があります。そうしないと、最初の認証ハンドシェイクが失敗する可能性があります。

NTLMを使用する場合、たとえば、セットアップに単一のドメインとフォレストがある場合、ユーザー名はドメインなしでユーザー名として簡単に指定できます。

ドメイン名を指定するには、ダウンレベルログオン名またはUPN(ユーザープリンシパル名)形式を使用します。たとえば、EXAMPLE \ userおよびuser@example.comです。

Windows SSPI対応のcurlバイナリを使用してKerberos V5、ネゴシエート、NTLM、またはダイジェスト認証を実行する場合、このオプションで単一のコロンを指定することにより、環境からユーザー名とパスワードを選択するようにcurlに指示できます: "-u:" 。

このオプションを複数回使用すると、最後のオプションが使用されます。

http://curl.haxx.se/docs/manpage.html#-u

--basicこれはデフォルトなので、フラグは必要ありません。


14
パスワードに?などの特殊文字が含まれている場合 または@その後、それを単一のティックに入れる必要があります。curl -u 'username:?p @ ssword' http://
Mirko Ebert

2
しかし、この実際のリクエストはどのように見えますか?多くの人がcurlでテストしているように感じますが、使用する言語でコードを記述します。--user情報はヘッダーとして送信されますか?もしそうなら、そのヘッダーはどのように見えるべきですか
Verty00

Postmanの@GautamKathrotiyaには、リクエストのAuthorizationタブにBasic Authオプションがあり、このAuthorizationヘッダーが挿入されます。
カイルカリカ-セント

1
@ Verty00では、curlで-vフラグを使用して、要求の内容を確認できます。
Zach

17

ヘッダーとして

AUTH=$(echo -ne "$BASIC_AUTH_USER:$BASIC_AUTH_PASSWORD" | base64 --wrap 0)

curl \
  --header "Content-Type: application/json" \
  --header "Authorization: Basic $AUTH" \
  --request POST \
  --data  '{"key1":"value1", "key2":"value2"}' \
  https://example.com/
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.