1

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を与える理由についての考え。

ありがとう!

4

1 に答える 1