Опция cUrls "-u"

Из cUrl docs:

-u, --user <user:password;options>

Specify the user name, password and optional login options to use for server authentication. Overrides -n, --netrc and --netrc-optional.

Что он переводит на, что означает, как я поймаю его на сервере для аутентификации пользователя: находятся ли они в GET или в параметрах POST?

Язык не важен, идея важна.

Ответы

Ответ 1

Все зависит от метода аутентификации , но для наиболее распространенных - Basic Auth и Digest Auth, это работает с ad hoc заголовками HTTP. Вот пример с Basic Auth:

curl -u john:pwd http://foo.com/misc

Выполняет запрос GET с соответствующим заголовком:

GET /misc HTTP/1.1
Authorization: Basic am9objpwd2Q=
User-Agent: curl/7.33.0
Host: foo.com
Accept: */*

Заголовок Authorization содержит данные аутентификации, которые сервер должен анализировать, base64 decode [1] и использовать. Тот же заголовок будет установлен с запросом POST. Вы можете легко протестировать его с помощью службы httpbin (1) (см. /basic-auth/:user/:passwd конечная точка).

Дайджест auth немного сложнее, но также работает с заголовками HTTP:

  • клиент сначала отправляет свой запрос, сервер отвечает с 401 Unauthorized, включая заголовок WWW-Authenticate, с задачей решить,
  • клиент решает проблему и отправляет другой запрос с ответом, включенным в заголовок Authorization, который должен анализироваться и проверяться на стороне сервера.

[1]: base64("john:pwd")am9objpwd2Q=

Ответ 2

Существует более простой способ сделать. Сделайте это так.

curl " http://user:[email protected]"

Ответ 3

В PHP/nginx он доступен в этом элементе массива как строка с кодировкой base64. Он работает как с методами GET, так и с POST (curl -X POST).

$_SERVER['HTTP_AUTHORIZATION']

Запрос:

curl http://127.0.0.1:8080/test.php  -u arun:12345

значение в $_SERVER ['HTTP_AUTHORIZATION']:

Basic YXJ1bjoxMjM0NQ==