Base64编码HTTP_AUTHORIZATION标头DRF

时间:2015-04-22 15:29:23

标签: python django django-rest-framework

我正在尝试使用Django Rest Framework创建一个测试:

self.api = APIClient()
self.api.credentials(HTTP_AUTHORIZATION='client_id ' + str(self.client_id) + ' client_secret ' + str(self.client_secret))
response = self.api.post(url, payload)

但是我在上面得到了这个错误:

  

无效的基本标头。凭据未正确base64编码。

我是否需要对标头进行base64编码?我以为这是为你完成的? 使用curl测试相同的东西没有任何问题,即

curl -X POST -d "stuff=stuff" http://RqePZpAwyyVqal9D:18288GHFRb@127.0.0.1:8000/api/test/

2 个答案:

答案 0 :(得分:1)

事实上,你需要自己对auth字符串进行base64编码。在这种情况下,我认为它应该看起来像:

import base64

auth = 'client_id %s client_secret %s' % (base64.b64encode(self.client_id),
                                          base64.b64encode(self.client_secret))
self.api.credentials(HTTP_AUTHORIZATION=auth)

答案 1 :(得分:1)

您永远不会指定您使用的身份验证方法类型,因此现在我假设您使用的是某种形式的OAuth(因为client_idclient_secret)。

发送OAuth凭据using the Authorization header时,您必须将其作为Basic access authentication凭据发送。这意味着它们应该在发送之前以client_id:client_secret和base64编码的形式发送。

import base64

credentials = '%s:%s' % (self.client_id, self.client_secret)
authorization = 'Basic %s' % (base64.b64encode(credentials), )

self.api = APIClient()
self.api.credentials(HTTP_AUTHORIZATION=authorization)

response = self.api.post(url, payload)