Hyperledger锯齿供应链Python认证

时间:2019-11-19 14:51:44

标签: python-3.x hyperledger hyperledger-sawtooth

我为供应链编写了Python客户端。我可以这样创建一个新代理:

client = SupplyChainClient()
client.create_agent('test')
client.post_user('test')

之后,我可以创建一个记录类型,最后创建一个记录。现在,我不想在创建新记录之前创建客户端。因此,我正在尝试使用如下用户名和密码对客户端进行身份验证:

import requests

resp = requests.post('http://localhost:3000/authorization', auth=('test', '<hash value of the password>'))
print(resp.json())

我已经从RethinkDB中获得了哈希值进行测试。

每次我收到此错误:

{'error': 'Authorization requires username and password'}

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

正如我在服务器那部分的源代码中看到的那样,您没有在请求中提供用户名和密码。

// Checks an object with username and password keys.
// Returns an auth token and the user\'s private key if it passes.
 const authorize = ({ username, password }) => {
 if (!username || !password) {
  const message = 'Authorization requires username and password'
  return Promise.reject(new BadRequest(message))
 }

 return users.query(users => users.filter({ username }))
.then(matches => {
  if (matches.length === 0) throw new Error()
  const user = matches[0]

  return bcrypt.compare(password, user.password)
    .then(passValid => {
      if (!passValid) throw new Error()
      return createToken(user.publicKey)
        })
    .then(token => ({
      authorization: token,
      encryptedKey: user.encryptedKey
    }))
})
.catch(() => { throw new Unauthorized('Authorization Failed') })
 }

如果要登录,则创建用户位于用户->创建中。