JWT 認証を使用して CRUD API を作成するために、素晴らしいEve REST フレームワークを使用しています。ここに投稿されたチュートリアルを見てきましたが、トークン認証を必要とするエンドポイントに POST リクエストを実行すると、401 エラーが発生します。
私はこの SO の質問を読みました: Python Eve TokenAuth 機能の問題ですが、トークンが 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}}
以下は私のコードです:
app.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を与える理由についての考え。
ありがとう!