身份验证令牌问题 EVE
authentication token issue EVE
您好,我正在使用 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()
我正在使用用户名 test 和密码 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 命令有问题吗?
您必须在发送令牌之前用 base64 编码,而在 mongodb 中未编码。
当 Eve 收到令牌时,它被解码,然后将其与数据库进行比较。
如果您发送:
curl -X "GET" "http://api.domain.com:5000/people/obama" -H "Authorization: Basic dGVzdDoxMjM0"
在数据库中必须存储:
"token" : "1234",
此外,您必须对令牌 + 进行编码:例如,如果您在 db 中的令牌值为“1234”,则您必须编码并发送“1234:”
您的代码有一些问题:
- 您在授权 header 中发送用户名和密码,而您的
RolesAuth
class 正在对 token
执行查找。尝试传递编码令牌。
- 您将 base64 编码的令牌存储在 Mongo 中,但您可能想要存储干净的令牌,因为
check_auth
方法将接收解码值作为 token
参数(或你必须在执行查找之前再次对其进行编码。
- 您真的不想将干净的密码存储在数据库中。这些应该是 hashed/salted.
您好,我正在使用 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()
我正在使用用户名 test 和密码 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 命令有问题吗?
您必须在发送令牌之前用 base64 编码,而在 mongodb 中未编码。
当 Eve 收到令牌时,它被解码,然后将其与数据库进行比较。
如果您发送:
curl -X "GET" "http://api.domain.com:5000/people/obama" -H "Authorization: Basic dGVzdDoxMjM0"
在数据库中必须存储:
"token" : "1234",
此外,您必须对令牌 + 进行编码:例如,如果您在 db 中的令牌值为“1234”,则您必须编码并发送“1234:”
您的代码有一些问题:
- 您在授权 header 中发送用户名和密码,而您的
RolesAuth
class 正在对token
执行查找。尝试传递编码令牌。 - 您将 base64 编码的令牌存储在 Mongo 中,但您可能想要存储干净的令牌,因为
check_auth
方法将接收解码值作为token
参数(或你必须在执行查找之前再次对其进行编码。 - 您真的不想将干净的密码存储在数据库中。这些应该是 hashed/salted.