curl的基本授权命令
Posted
技术标签:
【中文标题】curl的基本授权命令【英文标题】:basic authorization command for curl 【发布时间】:2014-01-15 04:50:37 【问题描述】:如何使用 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
【问题讨论】:
【参考方案1】:如何设置基本授权?
您只需使用-u, --user USER[:PASSWORD]
。在幕后 curl
为您构建了带有 base64 编码凭据的 Authorization
标头。
例子:
curl -u username:password -i -H 'Accept:application/json' http://example.com
【讨论】:
在这种情况下,标题看起来像“授权:基本 base64(在 Authorization:Basic 之前再次使用 -H
标头。所以会是
curl -i \
-H 'Accept:application/json' \
-H 'Authorization:Basic BASE64_string' \
http://example.com
这里,BASE64_string
= username:password
的 Base64
【讨论】:
当然除了 '"username:password" 必须是 base64 编码而不是这里显示的普通... @DanielStenberg 就是这个!这就是我的请求失败的原因,很好。 冒号后面应该有一个空格。例如:Authorization: Basic BASE64_string
【参考方案3】:
背景
您可以使用base64
CLI 工具生成您的用户名 + 密码的 base64 编码版本,如下所示:
$ echo -n "joeuser:secretpass" | base64
am9ldXNlcjpzZWNyZXRwYXNz
-or-
$ base64 <<<"joeuser:secretpass"
am9ldXNlcjpzZWNyZXRwYXNzCg==
Base64 是可逆的,因此您也可以像这样对其进行解码以确认:
$ echo -n "joeuser:secretpass" | base64 | base64 -D
joeuser:secretpass
-or-
$ base64 <<<"joeuser:secretpass" | base64 -D
joeuser:secretpass
注意: 用户名 = joeuser,密码 = 密码
示例 #1 - 使用 -H
你可以像这样把它放在curl
中:
$ curl -H "Authorization: Basic $(base64 <<<"joeuser:secretpass")" http://example.com
示例 #2 - 使用 -u
大多数人可能会同意,如果您打算这样做,那么您不妨使用curl
的-u
选项。
$ curl --help |grep -- "--user " -u, --user USER[:PASSWORD] Server user and password
例如:
$ curl -u someuser:secretpass http://example.com
但是,如果您将凭据保存在加密的保管库服务中,例如 LastPass 或 Pass,则可以以一种更安全的方式执行此操作。
例如,我在这里使用 LastPass 的 CLI 工具 lpass
来检索我的凭据:
$ curl -u $(lpass show --username example.com):$(lpass show --password example.com) \
http://example.com
示例 #3 - 使用 curl 配置
不过,还有一种更安全的方法可以将您的凭据交给curl
。此方法使用-K
开关。
$ curl -X GET -K \
<(cat <<<"user = \"$(lpass show --username example.com):$(lpass show --password example.com)\"") \
http://example.com
使用时,您的详细信息将保持隐藏状态,因为它们通过临时文件描述符传递给 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%
注意:上面我正在与我们的一个 Elasticsearch 节点通信,询问集群的健康状况。
此方法动态创建一个内容为user = "<username>:<password>"
的文件并将其提供给curl
。
HTTP 基本授权
上面显示的方法正在促进一种称为基本授权的功能,它是 HTTP 标准的一部分。
当用户代理想要将身份验证凭据发送到 服务器,它可以使用授权字段。
授权字段的构造如下:
用户名和密码由一个冒号 (:) 组合而成。 这意味着用户名本身不能包含冒号。 生成的字符串被编码为八位字节序列。字符集 默认情况下未指定用于此编码的,如 只要它与 US-ASCII 兼容,但服务器可能会建议使用 UTF-8 通过发送 charset 参数。 使用 Base64 的变体对生成的字符串进行编码。 然后将授权方法和空格(例如“Basic”)添加到 编码的字符串。
例如,如果浏览器使用 Aladdin 作为用户名,并且 OpenSesame 作为密码,则该字段的值为 Aladdin:OpenSesame 的 base64 编码,或 QWxhZGRpbjpPcGVuU2VzYW1l。 然后 Authorization 标头将显示为:
授权:基本 QWxhZGRpbjpPcGVuU2VzYW1l
来源:Basic access authentication
【讨论】:
有点吹毛求疵,但你不解密 base64 字符串,它正在解码 :) 还应将-w0
用于base64
命令以禁用换行。【参考方案4】:
一种方法,提供--user
标志作为curl
的一部分,如下所示:
curl --user username:password http://example.com
另一种方法是从任何在线网站(例如 - https://www.base64encode.org/)获取 "username:password" 的 Base64 编码令牌,并将其作为 curl
的 Authorization
标头传递,如下所示:
curl -i -H 'Authorization:Basic dXNlcm5hbWU6cGFzc3dvcmQ=' http://localhost:8080/
这里,dXNlcm5hbWU6cGFzc3dvcmQ=
是 Base64
的编码标记 username:password
。
【讨论】:
感谢您提供 base64 编码令牌的信息 请不要使用在线网站来编码您的密码,伙计们。使用echo -n "password" | base64
。
你需要同时编码用户+密码:echo -n "username:password" | base64
.【参考方案5】:
这可能发生在大型 Intranet 上,您将需要 base64(域/用户:密码)。
【讨论】:
【参考方案6】:curl -D- -X GET -H "Authorization: Basic ZnJlZDpmcmVk" -H "Content-Type: application/json" http://localhost:7990/rest/api/1.0/projects
--note
base46 encode =ZnJlZDpmcmVk
【讨论】:
请正确格式化代码并给出一些解释。以上是关于curl的基本授权命令的主要内容,如果未能解决你的问题,请参考以下文章
php + curl + multipart/form-data + 代理授权(基本)