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(:)?我试图理解的是“基本”字后面的符号的含义:) 【参考方案2】:

在 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 = "&lt;username&gt;:&lt;password&gt;" 的文件并将其提供给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 编码令牌,并将其作为 curlAuthorization 标头传递,如下所示:

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 + 代理授权(基本)

Axios 基本授权未在 Reactjs 中通过

如何使用 angular.js 进行基本的 http 授权? [复制]

CouchDB未授权访问漏洞执行任意系统命令exp

如何使用浏览器发送授权标头

如何基于此 curl 设置授权令牌?