web-dev-qa-db-ja.com

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

Apigility( Apigilityドキュメンテーション - > RESTサービスチュートリアル )を学び、POSTを送信しようとしていますcURLを介した基本認証による要求

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

YXBpdXNlcjphcGlwd2Q=は私の資格情報apiuser:apipwdを持つbase 64エンコード文字列です。認証情報は/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"

ここの間違いはどこにありますか?どうやって動かすの?

94
automatix
curl -u username:password http://
curl -u username http://

ドキュメンテーションページから:

- u、--user <user:password>

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

単にユーザー名を指定すると、curlはパスワードを要求します。

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

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

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

ドメイン名を指定するには、下位レベルログオン名またはUPN(ユーザープリンシパル名)形式を使用します。たとえば、EXAMPLE\userと[email protected]です。

Windows SSPI対応のcurlバイナリを使用してKerberos V5、Negotiate、NTLM、またはDigest認証を実行する場合は、このオプションでコロンを1つ指定することで、curlに環境からユーザー名とパスワードを選択させることができます。 。

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

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

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

183
Gajus

OAuthや他の認証サービスを使うとき、あなたはしばしば認可ヘッダの代わりにクエリ文字列であなたのアクセストークンを送ることができます。

GET https://www.example.com/v1/users/1?access_token=abcdefghijklmnopqrstuvwxyz1234567890ABCD
7
Wilt

ヘッダとして

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/
6
srghma