您如何在Eve中处理基于cookie的身份验证?

问题描述 投票:1回答:1

我正在使用Eve 0.7,Eve-Sqlalchemy 0.7.1和在我的域上实现并设置的TokenBasedAuth类。它用作通过授权标头发送令牌的请求的设计。

根据本地设计的示例:

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

我有一个用例,其中客户端希望发送其中包含auth令牌的Cookie标头。但是,当我尝试这种请求时

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

我得到回应

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

在Eve 0.7中是否可以处理基于Cookie的身份验证?

到目前为止,我已经尝试在on_pre_GET事件挂钩中添加一些日志记录语句,以尝试了解正在发生的事情,但是该挂钩永远不会触发。我假设内部可能正在发生某些事情,以返回401,因为没有auth标头(我还没有看过源代码,所以只是猜测)。

我也在设置中设置了X_ALLOW_CREDENTIALS = True,但我认为这不是解决问题的方法(如果我错了,请告诉我!)。

感谢您阅读和提供任何帮助!


更新

我通读eve / auth.py(https://github.com/pyeve/eve/blob/52a927fe69ff05d3098d62145efe1fbfaddb5cf9/eve/auth.py),我相信我可以重写授权(https://github.com/pyeve/eve/blob/52a927fe69ff05d3098d62145efe1fbfaddb5cf9/eve/auth.py#L258)来完成我需要的工作。确认后,我可以再次更新。

authentication cookies eve
1个回答
0
投票

令牌身份验证类(https://github.com/pyeve/eve/blob/52a927fe69ff05d3098d62145efe1fbfaddb5cf9/eve/auth.py#L230)具有可以覆盖的authorized()方法。

但是],这不是文档化的覆盖方法,所以要知道这样做可能会在不同版本的Eve中遇到问题。

我修改方法的方法是让它查找Cookie标头,如果找到,请尝试从中获取身份验证令牌。如果找到一个,并且check_auth返回true,则调用set_user_or_token并返回。

如果没有cookie标头,或者令牌没有成功check_auth,请使用父类的授权方法来处理其他情况(例如Authorization标头)。

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)
© www.soinside.com 2019 - 2024. All rights reserved.