Hawk auth работает с Python Requests, но не с JS Axios - PullRequest
0 голосов
/ 12 июня 2018

У меня есть сервер, который использует аутентификацию Hawk (Django Rest Framework).

При выполнении аутентифицированных запросов у меня нет проблем с пакетом python requests.

Однако при использованиипакет javascript axios, заголовок Authorization не достигает моего промежуточного ПО аутентификации.

Запрос Python с requests, работает

->
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"}

Запрос JS с axios завершается неудачно, поскольку промежуточное ПО аутентификации не видит 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 определенно удаляется до того, как запрос достигает промежуточного программного обеспечения для аутентификации, но я не могу понять, где.

Ответы [ 2 ]

0 голосов
/ 21 марта 2019

У меня также была похожая проблема, когда последующие запросы после запроса входа в систему обрабатывались сервером как другой сеанс.Я искал повсюду, чтобы найти, что делать, прежде чем мне удалось запустить опцию встроенного файла cookie пакета запроса, https://www.npmjs.com/package/request.

Файлы cookie по умолчанию отключены в запросе (иначе,они будут использоваться в последующих запросах).Чтобы включить куки, установите для jar значение true (по умолчанию или в параметрах).

var request = request.defaults({jar: true})
request('http://www.google.com', function () {
  request('http://images.google.com')
})

В качестве альтернативы, если вы хотите использовать популярные axios, вам нужно получить еще несколько пакетов javascript.Я приземлился на это решение, https://www.npmjs.com/package/axios-cookiejar-support.Кажется, что, несмотря на все классные вещи, которые Axios может выполнять с точки зрения обещаний, он не имеет встроенной поддержки файлов cookie, если вы не включите некоторые другие пакеты.

const axios = require('axios').default;
const axiosCookieJarSupport = require('@3846masa/axios-cookiejar-support').default;
// const axiosCookieJarSupport = require('axios-cookiejar-support').default;
const tough = require('tough-cookie');

axiosCookieJarSupport(axios);

const cookieJar = new tough.CookieJar();

axios.get('https://google.com', {
  jar: cookieJar, // tough.CookieJar or boolean
  withCredentials: true // If true, send cookie stored in jar
})
.then(() => {
  console.log(cookieJar);
});

Надеюсь, это кому-то поможетМне потребовался целый день, чтобы понять, что не так с моей просьбой.

0 голосов
/ 29 августа 2018

Проблема заключалась в том, что Axios не присоединяет заголовок Authorization после ответа 301-го перенаправления, т. Е. Не было заголовка Authorization в действительном запросе GET к правильному (с добавлением обратного слеша) URL-адресу.Решением было разделить запросы и убедиться в наличии заголовка - или просто исправить URL-адрес конечной точки в первый раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...