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)
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.
您可以使用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
您可以curl像这样将它们放在一起:
$ curl -H "Authorization: Basic $(base64 <<<"joeuser:secretpass")" http://example.com
Run Code Online (Sandbox Code Playgroud)
大多数人可能会同意,如果您打算这样做,那么最好也使用curl的-u选项。
Run Code Online (Sandbox Code Playgroud)$ curl --help |grep -- "--user " -u, --user USER[:PASSWORD] Server user and password
例如:
$ curl -u someuser:secretpass http://example.com
Run Code Online (Sandbox Code Playgroud)
但是,如果将凭据保存在加密的保险库服务(例如LastPass或Pass)中,则可以采用半安全的方式进行此操作。
例如,这里我使用LastPass的CLI工具lpass来检索我的凭据:
$ curl -u $(lpass show --username example.com):$(lpass show --password example.com) \
http://example.com
Run Code Online (Sandbox Code Playgroud)
还有一种更安全的方式将凭据传递给您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标准的一部分。
当用户代理想要将身份验证凭据发送到服务器时,它可以使用“授权”字段。
授权字段的构造如下:
- 用户名和密码用单个冒号(:)组合。这意味着用户名本身不能包含冒号。
- 结果字符串被编码为八位字节序列。默认情况下,用于此编码的字符集是未指定的,只要它与US-ASCII兼容即可,但是服务器可以通过发送charset参数来建议使用UTF-8。
- 结果字符串使用Base64的变体进行编码。
- 然后将授权方法和一个空格(例如“ Basic”)添加到编码字符串中。
例如,如果浏览器使用Aladdin作为用户名,使用OpenSesame作为密码,则该字段的值为Aladdin:OpenSesame或QWxhZGRpbjpPcGVuU2VzYW11l的base64编码。然后,授权标头将显示为:
授权:基本QWxhZGRpbjpPcGVuU2VzYW1l
来源:基本访问身份验证