gpt4 book ai didi

django - 如何使 Django REST JWT 身份验证扩展到多个 Web 服务器?

转载 作者:行者123 更新时间:2023-12-02 09:45:56 26 4
gpt4 key购买 nike

我目前有一个 Django 应用程序,它只是一堆 REST API(当然由数据库支持)。我正在使用 Django REST framework JWT 管理我的身份验证。运行良好。每当用户登录时,我的 API 之一都会返回一个 token ,消费应用程序会存储该 token 以供以后使用。到目前为止一切顺利。

但是,在未来,该解决方案将需要扩展。我可以预见到需要多个 Web 服务器的情况,而不是让单个服务器运行 Django 应用程序。当然,所有这些网络服务器都将连接到同一个数据库。但由于 token 不存储在数据库中,这将如何与多个 Web 服务器一起工作?一台服务器颁发的 token 在另一台服务器上无效。

那么其他人是如何解决这个问题的呢?

最佳答案

简而言之,您不需要需要担心 JWT 的扩展

详细说明:

首先我们了解一下Django-Rest-Framework(DRF)提供的默认token认证与DRF-JWT提供的token在实现上的区别

由 DRF 提供的 token

rest_framework.authentication.TokenAuthentication

token 创建:

1)创建 token

Token.objects.create(user=user)

2)将步骤1中创建的 token 存储在数据库中

3)将token返回给客户端

token 身份验证:

1)检查数据库中是否存在客户端传递的token

2)如果token存在,则表示用户已通过身份验证

DRF-JWT 提供的 token

rest_framework_jwt.authentication.JSONWebTokenAuthentication

token 创建:

1)创建 token

body = base64encode(header) + "."+ base64encode(有效负载)

signature = HMACSHA256_encode(body, 'secret_key') #secret key 通常在您的 settings.py 中指定

标记=正文+“。” +签名

2)将token返回给客户端

token 身份验证:

1)解码 token

token_segment = token.split('.')

body = token_segment[0] + "."+ token_segment[1]

签名 = token_segment[2]

decode_body = HMACSHA256_decode(signature, 'secret_key')

2)如果decode_body等于body,则用户通过身份验证

结论

从上面的机制,我们可以有把握地得出结论,JWT 方法更具可扩展性,因为它仅依赖于 Secret_key,并且每个网络服务器都应该在 settings.py 下拥有 Secret_key

因此,要回答您的问题,您无需担心缩放问题:)

关于django - 如何使 Django REST JWT 身份验证扩展到多个 Web 服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26126622/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com