【问题标题】:How do you handle cookie based authentication in Eve?你如何在 Eve 中处理基于 cookie 的身份验证?
【发布时间】:2020-01-28 19:49:38
【问题描述】:

我正在使用 Eve 0.7、Eve-Sqlalchemy 0.7.1 以及在我的域上实现和设置的 TokenBasedAuth 类。它适用于通过 Authorization 标头发送令牌的请求。

按本地设计工作的示例:

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

我有一个用例,客户端希望发送一个带有身份验证令牌的 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】:

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

    但是,它不是用于覆盖的记录方法,因此请注意,这样做可能会在不同版本的 Eve 中遇到问题。

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

    如果没有cookie头,或者token没有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)
    

    【讨论】:

      猜你喜欢
      • 2020-10-08
      • 2021-06-24
      • 2021-08-13
      • 2013-07-20
      • 2021-05-26
      • 1970-01-01
      • 2010-11-19
      • 2018-06-30
      • 1970-01-01
      相关资源
      最近更新 更多