身份验证令牌问题EVE

时间:2015-03-23 14:39:20

标签: python eve

您好我正在使用前夕令牌身份验证(http://python-eve.org/tutorials/account_management.html#accounts-with-token-authentication),但我遇到了401消息。


class RolesAuth(TokenAuth):
    def check_auth(self, token,  allowed_roles, resource, method):
        users = app.data.driver.db['users']
        lookup = {'token': token}
        if allowed_roles:
            lookup['roles'] = {'$in': allowed_roles}
        user = users.find_one(lookup)
        return user

if __name__ == '__main__':
    app = Eve(auth=RolesAuth)
    app.run()

我正在使用用户名测试和密码1234>这导致base64编码; dGVzdDoxMjM0

当我使用cURL


curl -X "GET" "http://api.domain.com:5000/people/obama" -H "Authorization: Basic dGVzdDoxMjM0" 

这导致了401

{"_status": "ERR", "_error": {"message": "Please provide proper credentials", "code": 401}}

我检查了mongodb并且令牌在那里

{
    "_id" : ObjectId("551004d6714e7a5fec0729e3"),
    "username" : "test",
    "_updated" : ISODate("2015-03-23T12:19:34.000Z"),
    "roles" : [ 
        "admin", 
        "superuser"
    ],
    "token" : "dGVzdDoxMjM0",
    "_created" : ISODate("2015-03-23T12:19:34.000Z"),
    "password" : "1234",
    "_etag" : "96b41717630a49bca41b89f971cc3b8bd8d518a3"
}

cURL命令有问题吗?

2 个答案:

答案 0 :(得分:1)

你必须在发送它之前在base64中对你的令牌进行编码,并且在未编码的mongodb中进行编码。

当Eve收到解码后的令牌,然后将其与db进行比较。

如果您发送:

curl -X "GET" "http://api.domain.com:5000/people/obama" -H "Authorization: Basic dGVzdDoxMjM0" 

必须存储db:

"token" : "1234",

此外,你必须编码令牌+:例如,如果db中的令牌值是“1234”,你必须编码并发送“1234:”

答案 1 :(得分:0)

您的代码有些问题:

  1. RolesAuth班级正在token上执行查询时,您正在使用授权标头发送用户名和密码。请尝试传递编码的令牌。
  2. 您在Mongo中存储了base64编码的令牌,但您可能希望存储干净的令牌,因为check_auth方法将接收解码值token参数(或者您必须再次对其进行编码)在执行查找之前)。
  3. 您真的不想将干净的密码存储在数据库中。这些应该是散列/盐渍。