我正在使用令人敬畏的Eve REST 框架来创建具有 JWT 身份验证的 CRUD API。我查看了此处发布的教程,但在对需要令牌身份验证的端点执行 POST 请求时收到 401 错误。
我读过这个 SO 问题:Python Eve TokenAuth Feature 的问题,但我很确定令牌是 Base64 编码的。
这是我在执行 cURL GET 请求时从服务器返回的响应:
curl -H "Authorization: <MYTOKEN>" -i http://MY_IP/users/548f6ecd64e6d12236c9576b
---- Response ----
HTTP/1.1 401 UNAUTHORIZED
Server: nginx/1.4.6 (Ubuntu)
Date: Tue, 16 Dec 2014 10:49:25 GMT
Content-Type: application/json
Content-Length: 91
Connection: keep-alive
WWW-Authenticate: Basic realm:"eve"
{"_status": "ERR", "_error": {"message": "Please provide proper credentials", "code": 401}}
下面是我的代码:
应用程序.py
from eve import Eve
from eve.auth import TokenAuth
import jwt
class RolesAuth(TokenAuth):
def check_auth(self, token, allowed_roles, resource, method):
users = app.data.driver.db['users']
# Add check of user credentials by decoding JWT
user = users.find_one({'token': token})
return user
def add_token(documents):
for document in documents:
payload = {'username': document['username']}
document["token"] = jwt.encode(payload, 'secret')
if __name__ == '__main__':
app = Eve(auth=RolesAuth)
app.on_insert_users += add_token
app.run()
设置.py
users_schema = {
'username': {
'type': 'string',
'required': True,
},
'password': {
'type': 'string',
'required': True,
},
'email': {
'type': 'string',
'minlength': 1,
'maxlength': 200,
'required': True,
},
'token': {
'type': 'string',
},
'created': {
'type': 'datetime',
}
}
users = {
'cache_control': '',
'cache_expires': 0,
'extra_response_fields': ['token'],
'public_methods': ['POST'],
'schema': users_schema
}
DOMAIN = {
'users': users,
}
我在我的 MongoDB 中为用户存储了一个令牌,我正在使用Postman发出请求,并且我将令牌包含在 Authorization 标头中,如下所示:
Authorization: <USERTOKEN>
关于为什么这给我一个 401 的任何想法。
谢谢!