【问题标题】:Base64 Authentication PythonBase64 身份验证 Python
【发布时间】:2013-08-10 22:29:42
【问题描述】:

我正在关注一个 api,我需要对我的用户 ID 和密码使用 Base64 身份验证。

'用户 ID 和密码都需要连接,然后进行 Base64 编码'

然后显示示例

'userid:password'

然后它继续说'在“授权标头”中提供编码值'

'例如:授权:BASIC {Base64 编码值}'

如何将其写入 python api 请求?

z = requests.post(url, data=zdata )

谢谢

【问题讨论】:

  • 使用 python v3.8.1 对我来说这个问题的答案都没有。我确实发现这个问题的答案对我有用:stackoverflow.com/questions/53622829/…
  • 使用“basicauth”包非常容易。试一试。

标签: python api authentication passwords request


【解决方案1】:

我推荐使用:

import request    
auth = ('username', 'password')
r = requests.post(url, auth=auth)

或者

import request
from requests.auth import HTTPBasicAuth
auth = HTTPBasicAuth('username', 'password')
r = requests.post(url, auth=auth)

https://2.python-requests.org/en/master/user/authentication/#basic-authentication

【讨论】:

    【解决方案2】:

    我找到了“basicauth”包,它真的让我很开心。使用 pip 我们可以安装。

    pip install basicauth
    

    示例客户端代码:

    from flask import request
    import basicauth
    
    username = request.form['username']
    passwd = request.form['password']
    encoded_creds = basicauth.encode(username, passwd)
    headers = {
        "Authorization": "{0}".format(encoded_creds) # Replaces as "Authorization": "Basic WdfV0Adh4Kdf="
    }
    r = requests.post("http://10.0.0.1:8008/login"), headers=headers)
    res = r.json()
    print(res)
    

    示例服务器端代码

    import basicauth
    from flask import request
    
    authorization = request.headers.get('Authorization')
    if authorization is not None and "Basic " in authorization:
        username, passwd = basicauth.decode(authorization)
        print(username, passwd)
    

    【讨论】:

    • 这对我很有帮助。 basicauth 包特别适合解码 Authorization 标头,这比编码更难。
    【解决方案3】:

    如请求文档中所述https://2.python-requests.org/en/latest/user/authentication/

    使用 HTTP Basic Auth 发出请求非常简单:

    >>> from requests.auth import HTTPBasicAuth
    >>> requests.get('https://api.github.com/user', auth=HTTPBasicAuth('user', 'pass'))
    <Response [200]>
    

    事实上,HTTP Basic Auth 非常常见,Requests 提供了一种方便的简写方式来使用它:

    >>> requests.get('https://api.github.com/user', auth=('user', 'pass'))
    <Response [200]>
    

    在这样的元组中提供凭据与 上面的 HTTPBasicAuth 示例。

    【讨论】:

      【解决方案4】:

      使用 python3,我找到了一个适合我的解决方案:

      import base64
      userpass = username + ':' + password
      encoded_u = base64.b64encode(userpass.encode()).decode()
      headers = {"Authorization" : "Basic %s" % encoded_u}
      

      【讨论】:

      • 不错的解决方案,在python3 上也适用于我。谢谢你。附言我在您的解决方案中添加了 import base64 语句。
      • 这个解决方案也适用于我在 python3 上。非常感谢
      【解决方案5】:

      您可以通过执行以下操作对数据进行编码并发出请求:

      import requests, base64
      
      usrPass = "userid:password"
      b64Val = base64.b64encode(usrPass)
      r=requests.post(api_URL, 
                      headers={"Authorization": "Basic %s" % b64Val},
                      data=payload)
      

      我不确定您是否必须在授权字段中添加“BASIC”字样。如果你提供API链接,那就更清楚了。

      【讨论】:

      • 例如为了将图像上传到 Imgur,Authorization 标头如下所示:"Client-ID yourClientPublicKey",数据前带有“Client-ID”关键字。
      • 这里的payload是什么?
      • @Dev 无论你想发送什么经过身份验证的请求
      • 在python3中我得到TypeError: a bytes-like object is required, not 'str'
      【解决方案6】:

      请求库有Basic Auth support 并会自动为您编码。您可以通过在 python repl 中运行以下命令来测试它

      from requests.auth import HTTPBasicAuth
      r = requests.post(api_URL, auth=HTTPBasicAuth('user', 'pass'), data=payload)
      

      您可以通过键入以下内容来确认此编码。

      r.request.headers['Authorization']
      

      输出:

      u'Basic c2RhZG1pbmlzdHJhdG9yOiFTRG0wMDY4'
      

      【讨论】:

      • 这里的payload是什么?
      • 有效负载可以是任何东西......比如来自表单提交的数据,或一些 json 数据等。
      • 我会建议这个答案而不是接受的答案。它是python-version 独立的。
      猜你喜欢
      • 1970-01-01
      • 2018-05-28
      • 1970-01-01
      • 2021-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-06
      相关资源
      最近更新 更多