【问题标题】:Django: safely store auth token to be share along all django usersDjango:安全存储身份验证令牌以与所有 Django 用户共享
【发布时间】:2021-06-24 10:56:15
【问题描述】:

我构建了一个 Django 站点,其中要求所有用户都使用 Django 的标准身份验证进行身份验证。在某些页面中,django 会向同样需要身份验证的第三方站点发出请求。

此第三方站点不是 django 站点,只有一个用户,这意味着所有 django 用户将共享该 1 个用户来检索信息。

对该第三方站点的身份验证使用 JWT 流。我们首先检索一个身份验证令牌,然后将此令牌发送到添加 Django 用户 ID 的期望端点,以检索该用户 ID 信息。

我想避免 django 中的所有用户执行多个请求以获取相同的身份验证令牌,因为这应该对所有用户都相同。

在 Django 中有没有办法安全地存储这个 auth Token?也许如果用户由于过期令牌而失败,django 会检索一个新令牌并将其安全存储以供所有用户使用?

【问题讨论】:

  • 您可以为此使用内存缓存后端,这样每个 django 进程只会检索 JWT 一次。

标签: python django session django-sessions django-cache


【解决方案1】:

您可以将令牌存储在环境变量中。这是安全的,这个 var 的多个请求没有问题,因为默认的 django 是同步的。所以只需将其存储在 .env 文件中并使用 python_decouple 包提取它

【讨论】:

    【解决方案2】:

    在需要访问此第 3 方站点令牌的代码中执行以下操作:

    remote_token = cache.get_or_set('remote-token', get_remote_token)
    

    get_or_set 可以采用一个可调用(函数),仅当缓存尚未填充时才会执行。

    更多信息here

    【讨论】:

    • 万一有人使用这个,我们需要在页面中添加:from django.core.cache import cache
    • 我的页面和代码被缓存正常吗?我想使用缓存来保存身份验证令牌值和另一个值。但是我现在遇到的问题是我的页面保留了缓存,我使用'BACKEND':'django.core.cache.backends.db.DatabaseCache',清除的唯一方法是从表中删除记录跨度>
    • 对不起,我刚刚发现了这个问题,我不得不从 Middleware 中删除以下内容以使缓存整个站点无效,“django.middleware.cache.UpdateCacheMiddleware”和“django.middleware.cache.FetchFromCacheMiddleware”
    猜你喜欢
    • 2010-09-27
    • 2013-02-12
    • 2016-05-21
    • 2021-01-10
    • 1970-01-01
    • 2021-02-24
    • 2019-02-07
    • 2021-11-06
    • 2016-11-16
    相关资源
    最近更新 更多