(Используя node.js, экспресс, паспорт-http)
У меня есть маршрут POST, выполняющий дайджест-аутентификацию, пытаясь использовать тип содержимого application-json.
Я могу пройти маршрут GET с дайджестом без проблем, и я могу пройти маршрут POST с базовой аутентификацией без проблем, но когда я пытаюсь выполнить POST с авторизацией дайджеста, я получаю 400 - Bad Request. Похоже, что curl помещает тип содержимого в начальный запрос дайджеста (с длиной содержимого 0, поэтому он знает достаточно, чтобы не отправлять тело json в начальный запрос дайджеста-аутентификации), и моя сторона (экспресс) терпит неудачу с неверный json (пустое тело):
$ curl -v --digest -X POST --data @body.json --user org2user2:lameduck -H "content-type: application/json" http://127.0.0.1:3002/user
* About to connect() to 127.0.0.1 port 3002 (#0)
* Trying 127.0.0.1...
* connected
* Connected to 127.0.0.1 (127.0.0.1) port 3002 (#0)
* Server auth using Digest with user 'org2user2'
> POST /user HTTP/1.1
> User-Agent: curl/7.24.0 (x86_64-apple-darwin12.0) libcurl/7.24.0 OpenSSL/0.9.8r zlib/1.2.5
> Host: 127.0.0.1:3002
> Accept: */*
> content-type: application/json
> Content-Length: 0
>
< HTTP/1.1 400 Bad Request
< X-Powered-By: Express
< Content-Type: text/plain
< Date: Thu, 21 Mar 2013 15:33:10 GMT
< Connection: keep-alive
< Transfer-Encoding: chunked
Кажется, я не могу понять магию curl для отправки начального пакета дайджеста без этого, добавляя только тип содержимого в фактический запрос данных, который следует.
Для справки, хотя я не думаю, что это поможет, вот расшифровка BASIC для того же звонка:
$ curl -v --basic -X POST --data @body.json --user org2user2:lameduck -H "content-type: application/json" http://127.0.0.1:3002/user
* About to connect() to 127.0.0.1 port 3002 (#0)
* Trying 127.0.0.1...
* connected
* Connected to 127.0.0.1 (127.0.0.1) port 3002 (#0)
* Server auth using Basic with user 'org2user2'
> POST /user HTTP/1.1
> Authorization: Basic b3JnMnVzZXIyOmxhbWVkdWNr
> User-Agent: curl/7.24.0 (x86_64-apple-darwin12.0) libcurl/7.24.0 OpenSSL/0.9.8r zlib/1.2.5
> Host: 127.0.0.1:3002
> Accept: */*
> content-type: application/json
> Content-Length: 48
>
* upload completely sent off: 48 out of 48 bytes
< HTTP/1.1 200 OK
< X-Powered-By: Express
< Content-Type: application/json; charset=utf-8
< Content-Length: 51
< Date: Thu, 21 Mar 2013 15:43:48 GMT
< Connection: keep-alive
<
{
"this": "is working",
"that": "is annoying"
* Connection #0 to host 127.0.0.1 left intact
}* Closing connection #0
Любая помощь будет потрясающей.