Как вы справляетесь с аутентификацией на основе cook ie в Eve? - PullRequest
1 голос
/ 28 января 2020

Я использую Eve 0.7, Eve-Sqlalchemy 0.7.1 и класс TokenBasedAuth, реализованный и установленный на моих доменах. Он работает как дизайн для запросов, отправляющих токен через заголовок авторизации.

Пример, который работает как спроектировано локально:

curl -sk -X GET -H "Authorization:Bearer $MY_JWT" localhost:5000/my_domain

У меня есть случай использования, где клиент хотел бы отправить заголовок Cook ie с токеном авторизации внутри него. Однако, когда я пытаюсь выполнить такой запрос

curl -sk -X GET -H "Cookie: $MY_COOKIE" localhost:5000/my_domain

, я получаю ответ

{
    "_status": "ERR",
    "_error": {
        "code": 401,
        "message": "Please provide proper credentials"
    }
}

Есть ли способ обработки Cook ie на основе аутентификация в Еве 0.7?

До сих пор я пытался добавить некоторые операторы записи в ловушку события on_pre_GET, чтобы попытаться показать, что происходит, но ловушка никогда не срабатывает. Я предполагаю, что что-то может происходить внутри, чтобы вернуть 401, так как нет заголовка аутентификации (я еще не смотрел на исходный код, поэтому просто догадываюсь).

Я также установил X_ALLOW_CREDENTIALS = True в своем настройки, но я не думаю, что это способ go об этом (если я ошибаюсь, просто дайте мне знать!).

Спасибо за чтение и любую помощь, которую вы можете предоставить!


Обновление

Я прочитал eve / auth.py (https://github.com/pyeve/eve/blob/52a927fe69ff05d3098d62145efe1fbfaddb5cf9/eve/auth.py) и считаю, что могу переопределить авторизованный (https://github.com/pyeve/eve/blob/52a927fe69ff05d3098d62145efe1fbfaddb5cf9/eve/auth.py#L258) делай то, что мне нужно. Как только я проверю, я могу обновить снова.

1 Ответ

0 голосов
/ 29 января 2020

Класс аутентификации токена (https://github.com/pyeve/eve/blob/52a927fe69ff05d3098d62145efe1fbfaddb5cf9/eve/auth.py#L230) имеет метод authorized(), который можно переопределить.

Однако , это не документированный метод переопределения, поэтому знайте, что при этом вы можете столкнуться с проблемами в разных версиях Eve.

Способ, которым я модифицировал метод он должен был искать заголовок Cook ie и, если он найден, попытаться получить из него токен аутентификации. Если он находит его и check_auth возвращает true, вызывает set_user_or_token и возвращает.

Если заголовка cook ie нет или токен не успешно check_auth, перейдите к родительскому классу ' авторизованный метод для обработки других случаев (например, заголовок авторизации).

class MyTokenAuth(TokenAuth):
    def authorized(self, allowed_roles, resource, method):
        auth = None
        if request.headers.get("Cookie"):
            auth = self.try_to_get_auth_from_cookie(request.headers.get("Cookie"))

        if auth and self.check_auth(auth, allowed_roles, resource, method):
            super().set_user_or_token(auth)
            return True

        return super().authorized(allowed_roles, resource, method)
...