You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Hyperledger Sawtooth供应链Python客户端认证失败求助

解决供应链API认证报错:{'error': 'Authorization requires username and password'}

我来帮你一步步排查这个认证问题,你遇到的报错说明后端没有正确识别到你发送的用户名和密码信息,大概率是请求格式或者参数内容不对,咱们来逐个验证:

1. 别直接传哈希值!后端大概率要的是原始密码

你从RethinkDB里拿到的是存储后的密码哈希,但绝大多数API的认证逻辑是:前端传原始明文密码,后端自己做哈希运算后和数据库里的哈希值比对。直接传哈希值相当于把“加密后的密码”当明文发,后端根本没法识别。

先试试把auth参数里的哈希值换成你创建test用户时用的原始密码:

import requests

# 把<原始密码>替换成你创建test用户时用的真实密码
resp = requests.post('http://localhost:3000/authorization', auth=('test', '<原始密码>'))
print(resp.json())

2. 检查后端期望的认证格式

requests的auth=()参数默认会生成Basic Auth的请求头(格式是Basic base64编码的用户名:密码),但你的后端可能不支持这种方式,而是期望把用户名密码放在JSON请求体里。试试这种写法:

import requests

payload = {
    "username": "test",
    "password": "<原始密码>"  # 同样用原始密码,不是哈希值
}
resp = requests.post('http://localhost:3000/authorization', json=payload)
print(resp.json())

3. 验证请求头是否正确发送

如果还是报错,可以打印出请求的头信息,确认Authorization头有没有正确生成:

import requests
from requests.auth import HTTPBasicAuth

auth = HTTPBasicAuth('test', '<原始密码>')
resp = requests.post('http://localhost:3000/authorization', auth=auth)
# 打印请求头,看是否包含Authorization字段
print("发送的请求头:", resp.request.headers)
print(resp.json())

如果请求头里没有Authorization,那可能是requests的auth参数没生效;如果有,但后端还是报错,那说明后端不支持Basic Auth,得对应调整成后端要求的认证方式。

4. 确认RethinkDB里的用户记录正确性

最后再核对下RethinkDB里的用户数据:

  • 确保test用户存在,且密码哈希字段是正确的(比如字段名是不是password_hash,有没有和其他字段混淆)
  • 确认你拿到的哈希值确实属于test用户,没有拿错其他用户的记录

内容的提问来源于stack exchange,提问作者Henrik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:35:24