【问题标题】:Caching Django OAuth access token缓存 Django OAuth 访问令牌
【发布时间】:2015-10-08 03:34:20
【问题描述】:

我正在使用 Django OAuth Toolkit 和 Django Rest 框架

class DataView(BaseApiMixin, generics.GenericAPIView):
    permission_classes = (IsAuthenticated,)

    def get(self, request, *args, **kwargs):

        _dict = {}  
        return self.successful_get_response({"results": _dict})

每次调用视图时,我都会看到一个 db 调用来验证令牌。有没有办法只缓存这个数据库调用?

我正在使用 Redis 缓存其他查询,但无法找到缓存身份验证调用的解决方案。

任何帮助表示赞赏。

【问题讨论】:

    标签: python django caching oauth django-rest-framework


    【解决方案1】:

    身份验证令牌必须在每个请求上进行验证,因此无法缓存用于它的查询。每个请求都会检查令牌是否

    • 真正的令牌 - 缓存令牌查询可能会导致您有一段时间不包含新令牌(取决于缓存的查询)。每次生成令牌时都必须使缓存失效。
    • 未撤销 - 如果您在查询缓存后撤销了令牌,您可能会遇到仍然可以使用令牌的问题。每次撤销令牌时都必须使缓存失效。
    • 未过期 - OAuth 令牌自然会过期,您必须不断使缓存失效(取决于查询)。

    这就是为什么令牌不在任何地方缓存的原因,而是应该进行单个查询来检查每个请求的令牌。这相当于在使用 Django 会话时进行的检查,以验证会话密钥并检索每个请求的会话数据。

    【讨论】:

    • 是为了避免提供不安全访问的窗口吗?但是不是很贵吗?
    • 您必须权衡缓存失效的缺点和单个查询的缺点。而且我想我实际上并没有把它放在我的答案中,但是开箱即用地缓存令牌是不可能的。
    猜你喜欢
    • 2016-03-21
    • 2021-09-13
    • 2019-07-23
    • 1970-01-01
    • 1970-01-01
    • 2013-05-26
    • 2011-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多