【发布时间】:2018-01-20 09:58:56
【问题描述】:
我正在尝试从我的家用笔记本电脑调用位于 EC2 实例上的经过 jwt 身份验证的 django api。 API 将返回我一个身份验证密钥,但是当我尝试使用身份验证密钥时,它告诉我我没有被授权。我提供了一个示例,说明了我尝试使用的各种方法来使其工作。
我在这段代码中做错了什么,可以保证我的代码始终返回 401 错误吗?当请求带有 JWT 令牌的经过身份验证的 API 时,我需要做些什么或者我需要以特定方式设置我的标头,以便我可以获得一个返回值?还是这看起来像是后端的问题?
import requests
from urllib2 import Request, urlopen
import jwt
from requests_jwt import JWTAuth, payload_method
import json
def tryme(chats, payload, jwt):
#method1
res = requests.post(chats, json=payload)
print res.status_code
# error 401
# method2
req = requests.get(chats, params=payload)
print req.status_code
# error 401
# method3
req = Request(chats)
req.add_header('Authorization', 'Token token={}'.format(auth['token']))
req.add_header('content-type', 'application/json')
res = urlopen(req)
print res.status_code
# error 401
#method4
token = JWTAuth(jwt['token'])
out = requests.get(chats, auth=token)
print out.status_code
# error 401
out = requests.post(chats, auth=token)
print out.status_code
# error 401
def main():
payload = {
'username': 'testuser',
'password': 'test1234'
}
base_url = 'https://www.example.com/api/v1/'
api_auth = base_url + 'api-token-auth/'
chats = base_url + 'chats/'
auth = json.loads(requests.post(api_auth, json=payload).content)
# returns auth token
payload = {'Authorization': 'Token {}'.format(auth['token']), 'content-type': 'application/json'}
tryme(chats, payload, auth)
payload = {'Authorization': 'Bearer {}'.format(auth['token']), 'content-type': 'application/json'}
tryme(chats, payload, auth)
payload = {'Authorization': 'JWT {}'.format(auth['token']), 'content-type': 'application/json'}
tryme(chats, payload, auth)
if __name__ == '__main__':
main()
【问题讨论】:
-
Django JWT 中的默认标头方案是
Authorization: JWT <token>。在方法 3 中,您可以使用它。 -
完美。我会看看如何改进它。如果它有效,我会告诉你,你可以为我创建一个答案
标签: python django authentication jwt