curl的基本授权命令

Ami*_*rad 36 curl authorization

如何使用64位编码凭据设置基本授权?我尝试了两个命令,但没有用,请建议.

curl -i -H 'Accept:application/json' Authorization:Basic <username:password> http://example.com
curl -i -H 'Accept:application/json' Authorization:Basic.base64_encode(username:password) http://example.com  
Run Code Online (Sandbox Code Playgroud)

del*_*eil 46

如何设置基本授权?

您需要做的就是使用-u, --user USER[:PASSWORD].在幕后为您curl构建Authorization带有base64编码凭据的标头.

例:

curl -u username:password -i -H 'Accept:application/json' http://example.com
Run Code Online (Sandbox Code Playgroud)


Sab*_*san 28

-H在授权:基本事物之前再次使用标题.所以它会

curl -i \
    -H 'Accept:application/json' \
    -H 'Authorization:Basic username:password' \
    http://example.com
Run Code Online (Sandbox Code Playgroud)

  • 除了"用户名:密码"必须是base64编码而不是如此处所示的普通... (26认同)

Arp*_*wal 13

一种方式,提供--user标志作为其中一部分curl,如下:

curl --user username:password http://example.com
Run Code Online (Sandbox Code Playgroud)

另一种方法是从任何在线网站获取"用户名:密码"的Base64编码令牌,如https://www.base64encode.org/,并将其作为标题传递如下:Authorizationcurl

curl -i -H 'Authorization:Basic dXNlcm5hbWU6cGFzc3dvcmQ=' http://localhost:8080/
Run Code Online (Sandbox Code Playgroud)

这里dXNlcm5hbWU6cGFzc3dvcmQ=Base64编码的令牌username:password.

  • 请不要使用在线网站对您的密码进行编码.使用`echo -n"密码"| base64`. (9认同)
  • 您需要同时对 user + pass 进行编码:`echo -n "username:password" | base64`。 (5认同)

slm*_*slm 6

背景

您可以使用base64CLI工具生成用户名+密码的base64编码版本,如下所示:

$ echo -n "joeuser:secretpass" | base64
am9ldXNlcjpzZWNyZXRwYXNz

-or-

$ base64 <<<"joeuser:secretpass"
am9ldXNlcjpzZWNyZXRwYXNzCg==
Run Code Online (Sandbox Code Playgroud)

Base64是可逆的,因此您也可以将其解密以确认如下:

$ echo -n "joeuser:secretpass" | base64 | base64 -D
joeuser:secretpass

-or-

$ base64 <<<"joeuser:secretpass" | base64 -D
joeuser:secretpass
Run Code Online (Sandbox Code Playgroud)

注意: 用户名= joeuser密码= secretpass

示例#1-使用-H

您可以curl像这样将它们放在一起:

$ curl -H "Authorization: Basic $(base64 <<<"joeuser:secretpass")" http://example.com
Run Code Online (Sandbox Code Playgroud)

示例#2-使用-u

大多数人可能会同意,如果您打算这样做,那么最好也使用curl-u选项。

$ curl --help |grep -- "--user "
 -u, --user USER[:PASSWORD]  Server user and password
Run Code Online (Sandbox Code Playgroud)

例如:

$ curl -u someuser:secretpass http://example.com
Run Code Online (Sandbox Code Playgroud)

但是,如果将凭据保存在加密的保险库服务(例如LastPassPass)中,则可以采用半安全的方式进行此操作。

例如,这里我使用LastPass的CLI工具lpass来检索我的凭据:

$ curl -u $(lpass show --username example.com):$(lpass show --password example.com) \
     http://example.com
Run Code Online (Sandbox Code Playgroud)

Example#3-使用curl配置

还有一种更安全的方式将凭据传递给您curl。该方法利用了-K开关。

$ curl -X GET -K \
    <(cat <<<"user = \"$(lpass show --username example.com):$(lpass show --password example.com)\"") \
    http://example.com
Run Code Online (Sandbox Code Playgroud)

使用时,您的详细信息保持隐藏状态,因为它们是通过curl临时文件描述符传递到的,例如:

+ curl -skK /dev/fd/63 -XGET -H 'Content-Type: application/json' https://es-data-01a.example.com:9200/_cat/health
++ cat
+++ lpass show --username example.com
+++ lpass show --password example.com
1561075296 00:01:36 rdu-es-01 green 9 6 2171 1085 0 0 0 0 - 100.0%       
Run Code Online (Sandbox Code Playgroud)

注意:在上面,我正在与我们的Elasticsearch节点之一进行通信,询问集群的运行状况。

此方法动态创建带有内容的文件,user = "<username>:<password>"并将其提供给curl

HTTP基本授权

上面显示的方法促进了称为“基本授权”的功能,该功能是HTTP标准的一部分。

当用户代理想要将身份验证凭据发送到服务器时,它可以使用“授权”字段。

授权字段的构造如下:

  1. 用户名和密码用单个冒号(:)组合。这意味着用户名本身不能包含冒号。
  2. 结果字符串被编码为八位字节序列。默认情况下,用于此编码的字符集是未指定的,只要它与US-ASCII兼容即可,但是服务器可以通过发送charset参数来建议使用UTF-8。
  3. 结果字符串使用Base64的变体进行编码。
  4. 然后将授权方法和一个空格(例如“ Basic”)添加到编码字符串中。

例如,如果浏览器使用Aladdin作为用户名,使用OpenSesame作为密码,则该字段的值为Aladdin:OpenSesame或QWxhZGRpbjpPcGVuU2VzYW11l的base64编码。然后,授权标头将显示为:

授权:基本QWxhZGRpbjpPcGVuU2VzYW1l

来源:基本访问身份验证