【发布时间】:2018-11-21 09:46:58
【问题描述】:
我有一个使用 Hawk 身份验证(Django Rest Framework)的服务器。
在发出经过身份验证的请求时,我对 python requests 包没有任何问题。
但是,当使用 javascript axios 包时,Authorization 标头无法到达我的身份验证中间件。
requests 的 Python 请求有效
->
GET /logout/ HTTP/1.1
Host: localhost:8000
Accept-Encoding: identity
Authorization: Hawk mac="sPJZet9eQKyBZSBpbGVQefPzsfBIXNFJDWAPF93n6fA=", hash="q/t+NNAkQZNlq/aAD6PlexImwQTxwgT2MahfTa9XRLA=", id="z1dkOdDr", ts="1528778355", nonce="gBZQRS"
<-
HTTP/1.1 200 OK
Date: Tue, 12 Jun 2018 04:39:15 GMT
Server: WSGIServer/0.2 CPython/3.6.4
Content-Type: application/json
Vary: Accept
Allow: GET, HEAD, OPTIONS
Server-Authorization: Hawk mac="jBlHlyWCkirfBafbfw+N4iadwuQEsX99pATGXqxjOCY=", hash="2BRBGFjKOpKo9GffbS9rYZddAd5xoq/WdfD0Fm9wDhk="
X-Frame-Options: SAMEORIGIN
Content-Length: 41
{"detail": "user secret has been changed"}
带有axios 的JS 请求失败,因为auth 中间件在标头中没有看到Authorization:
->
GET /logout/ HTTP/1.1
Accept: application/json, text/plain, */*
Authorization: Hawk id="7RdDRgkJ", ts="1528778122", nonce="TQWhoS", mac="nrX3bJbVF1wQt/tWrmUf/y/oEmAE6oFPyM5uP5sqzLg="
User-Agent: axios/0.18.0
Host: localhost:8000
Connection: close
<-
HTTP/1.1 401 Unauthorized
Date: Tue, 12 Jun 2018 04:35:22 GMT
Server: WSGIServer/0.2 CPython/3.6.4
Content-Type: application/json
WWW-Authenticate: Hawk
Vary: Accept
Allow: GET, HEAD, OPTIONS
X-Frame-Options: SAMEORIGIN
Content-Length: 39
{"detail": "Hawk authentication failed"}
差异似乎是名义上的。什么可能造成问题? Authorization 标头在请求到达身份验证中间件之前肯定会被剥离,但我不知道在哪里。
【问题讨论】:
-
对我来说这是由于 apache 中的错误配置而发生的
-
为什么 Authorization 标头会在一种情况下通过而不是在另一种情况下?开发服务器也会出现这个问题,所以头部的移除肯定是在Django的请求中间件的某个地方发生的。
标签: javascript python django-rest-framework python-requests axios