【问题标题】:basic authorization command for curlcurl的基本授权命令
【发布时间】: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  

【问题讨论】:

    标签: curl authorization


    【解决方案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
    

    但是,如果您将凭据保存在加密的保管库服务中,例如 LastPassPass,则可以以一种更安全的方式执行此操作。

    例如,我在这里使用 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 标准的一部分。

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

    授权字段的构造如下:

    1. 用户名和密码由一个冒号 (:) 组合而成。 这意味着用户名本身不能包含冒号。
    2. 生成的字符串被编码为八位字节序列。字符集 默认情况下未指定用于此编码的,如 只要它与 US-ASCII 兼容,但服务器可能会建议使用 UTF-8 通过发送 charset 参数。
    3. 使用 Base64 的变体对生成的字符串进行编码。
    4. 然后将授权方法和空格(例如“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
      

      【讨论】:

      • 请正确格式化代码并给出一些解释。
      猜你喜欢
      • 2015-03-13
      • 2023-02-23
      • 2019-10-29
      • 1970-01-01
      • 2017-11-07
      • 2013-12-02
      • 2021-07-29
      • 2018-06-24
      相关资源
      最近更新 更多